Почему там AF_NETLINK? AF_UNIX недостаточно?

Если Вы хотите уменьшить вероятность кэширования VFS, увеличить давление кэша VFS путем настройки значения /proc/sys/vm/vfs_cache_pressure (значение по умолчанию равняется 100). Это будет настойчиво исправлять dentries и inodes из памяти. 1000 могла бы быть хорошая начальная точка. В моей системе установка 1 000 уменьшает плиту приблизительно на 75% или около этого.

Обратите внимание, что это, вероятно, не, что Вы хотите сделать, как бы то ни было. Существует очень немного вариантов использования, что Вы хотите уменьшить использование кэш-памяти файловой системы - оно освобождено для использования программами, как только им нужно оно.

7
30.01.2015, 11:32
1 ответ

Если известно, что время не превышает одного часа, можно просто добавить 60, если результат отрицательный. Тем не менее, это не способ сделать это в любом случае. Есть несколько моментов, которые я хотел бы поднять:

  1. НИКОГДА не разбирайте выходные данные ls, особенно не временной части. Это зависит от языка и может дать совершенно непредсказуемые результаты.
  2. Почему предполагается, что время составляет около часа и точно так же, как в минуты, если вы можете просто вычесть даты? Использовать unix timestamp - число секунд с начала света (1970). Это стандартный способ хранения времени.
  3. Просто запишите позвольте i++ и позвольте l = j-k , не используйте миллионы скобок
  4. Вы делаете $ l массив длины 1, а затем доступ $ i -й член. Вот почему это работает только для первой пары.
  5. Вы используете очень c-подобный стиль программирования. Используйте цикл формы для i в "$ {MMarray [@]}"; сделать... и просто сохраните предыдущий.
  6. Вы используете слишком много массивов и циклов, делайте все в потоке дат, это будет намного лучше. Так что практически все можно переписать.
  7. Вы понимаете, что среднее время просто сначала минус последнее деление на количество файлов минус 1 (количество расхождений)? Вам не нужно вычитать и снова складывать...

Что делать, если вы хотите получить все временные различия в секундах, по одному на строку:

find /some/location -type f -name '*your filter which files you want*' -printf '%T@\n' | sort -n | awk 'NR>1 { print  $1-previous } {previous = $1}'

Что он делает? find находит файлы и печатает метки времени unix. Если не указать -имя , то появится список всех событий. -type f означает только файлы, без каталогов. sort -n сортирует время численно. awk просто вычисляет и печатает различия.

Для среднего значения просто сохраните первую и последнюю дату. Например, для всех файлов в текущем каталоге:

find . -type f -printf '%T@\n' | sort -n | awk 'NR==1 { first = $1 } END{ print ($1-first)/(NR-1) }'

Результаты представляют собой десятичные числа в секундах, но вы можете просто записать int (($1-first )/( NR-1)) для целого числа или int (($1-first )/( NR-1) )/60 в течение минут.

-121--161401-

Вероятно, вы хотите завершить сеанс упорядоченным образом. Этот ответ в SuperUser, по-видимому, обеспечивает следующее: https://superuser.com/questions/395820/how-to-properly-end-a-kde-session-from-shell-without-root-privileges

-121--77171-

Происхождение и конструктивные особенности различны. Как правило, лучше разработать протокол с нуля, потому что тогда вы можете сделать его специально подходящим для того, что вам нужно, не имея проблем с устаревшими протоколами.

Я считаю, что этот выбор был связан с тем, что внутриядерная реализация доменных сокетов UNIX слишком отличается, чтобы позволить sane портирование на связь пользователя с ядром. Список протоколов для AF_NETLINK специально разработан для обеспечения иоктл-подобного управления. AF_UNIX даже не использует аргумент "protocol" для функции socket . И если они каким-то образом расширили определение, чтобы разрешить дополнительные протоколы,вероятно, он нарушит существующие приложения, и будет очень неловко в ядре перенаправлять новые протоколы на управляющий код ядра. Кроме того, существует опасность дублирования этих двух функциональных возможностей (особенно с учетом того, что изначально AF_UNIX не разрабатывалась с учетом этого).

И наконец... Доменные сокеты UNIX используют файловую систему в качестве пространства имен (хотя существует взлом, допускающий «анонимные» сокеты). Таким образом, они сразу доступны всем пользователям, которые имеют разрешения на этот сокет - для связи с ядром необходимо иметь всегда открытый «файл» где-то в файловой системе (sys, вероятно,?), который пользователи будут использовать для подключения к ядру.

Короче говоря, они просто предназначены для разных вещей. Даже если вы можете повторно использовать AF_NETLINK для двух процессов в пространстве пользователя (это делается по-другому, чем в AF_UNIX), обратное на самом деле не сработает.

2
27.01.2020, 20:19

Теги

Похожие вопросы