pkexec - как мне установить индивидуальный тайм-аут для auth_admin_keep при написании политики pkexec

При использовании файловой системы с закольцовыванием необходимо учитывать файловую систему, в которой она создана. В частности, ядро, скорее всего, не будет немедленно сбрасывать записанные страницы закольцовывания FS на диск содержащей файловой системы, несмотря на вызов fsync в закольцовывании fs. Эти записи могут быть sync d в закольцовывании, но они могут находиться как грязные страницы в памяти для содержащей FS.

Теперь то, как опция nobarrier взаимодействует с драйвером закольцовывания, а также с файловой системой, в чем я не уверен. Таким образом, я провел эксперимент. Я добавил переменную монтирования содержащей файловой системы с sync . Результаты следующие.

(все выходы из dd, если =/dev/ноль = xfs/output bs = 32K count = 10000 conv = fsync )

  1. , содержащие fs асинхронный , закольцовывание барьер

     32768000 байты (33 МБ) скопированы, 0,401873 s, 81,5 МБ/с
    
  2. , содержащий fs асинхронный , закольцовывание nobarrier

     32768000 байт (33 МБ) скопировано, 0,0414423 с, 791 МБ/с
    
  3. , содержащий fs sync , барьер закольцовывания

     32768000 байты (33 МБ) скопированы, 71,5749 s, 458 КБ/с
    
  4. содержит fs sync , закольцовывание nobarrier

     32768000 байт (33 МБ) скопировано, 70,6415 s, 464 kB/s
    

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

Вывод заключается в том, что тестирование барьера и nobarrier с файловой системой с закольцовыванием не будет полезным. Взаимодействие файловой системы с кэшированием ядра будет достигнуто в путь. Я подозреваю, что кэш ядра не единственная вещь, которая вызовет ошибочные результаты при тестировании производительности с использованием закольцовываний.

-121--243482-

В обоих случаях цикл будет выполняться дважды (один раз для слова seq и один раз для слова 10 ).

Кроме того, оба будут объединять смежные пробелы и удалять начальные/конечные пробелы, так что выходные данные не обязательно будут представлять собой две копии входных данных.

Первая

#!/bin/sh
for j in $(seq 10); do
    cat input
done >> output

Вторая

#!/bin/sh
i="$(cat input)"
for j in $(seq 10); do
    echo "$i"
done >> output

Одна из причин, по которой эхо медленнее, может заключаться в том, что переменная без кавычек разделяется в пробеле на отдельные слова. Для 50MB это будет большой работой. Приведите переменные!

Я предлагаю исправить эти ошибки, а затем повторно оценить время.


Я протестировал это локально. Я создал файл 50MB, используя выходные данные tar cf - | dd bs = 1M count = 50 . Я также расширил циклы, чтобы запустить с коэффициентом x100, чтобы тайминги были масштабированы до разумного значения (я добавил еще один цикл вокруг всего вашего кода: для k в $ (seq 100); ... сделано ). Вот тайминги:

time ./1.sh

real    0m5.948s
user    0m0.012s
sys     0m0.064s

time ./2.sh

real    0m5.639s
user    0m4.060s
sys     0m0.224s

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

time ./2original.sh

real    0m12.498s
user    0m8.645s
sys     0m2.732s
-121--28360-

Эхо-сигнал предназначен для размещения на экране 1 строки. Во втором примере содержимое файла помещается в переменную, а затем печатается. В первом вы сразу выставляете контент на экран.

cat оптимизирован для этого использования. echo не является. Кроме того, помещение 50Mb в переменную среды не является хорошей идеей.

3
26.04.2018, 15:25
1 ответ

К сожалению, тайм-аут кажется жестким -, закодированным как 5 минут в исходном коде PolicyKit, в файле src/polkitbackend/polkitbackendinteractiveauthority.c.

В строках 3231 -3236 написано:

/* TODO: right now the time the temporary authorization is kept is hard-coded - we
 *       could make it a propery on the PolkitBackendInteractiveAuthority class (so
 *       the local authority could read it from a config file) or a vfunc
 *       (so the local authority could read it from an annotation on the action).
 */
 expiration_seconds = 5 * 60;

Таким образом, тайм-аут установлен в исходном коде на 5 минут, и в настоящее время нет условий для его изменения без перекомпиляции соответствующих частей PolicyKit.

С другой стороны, OpenSuSE Leap 15, кажется, расширил эту функциональность. Похоже, что -они интерпретировали действия ..._keepкак означающие «запомнить аутентификацию во время выполнения запрашивающего процесса», и добавили действия ..._keep_sessionи ..._keep_alwaysкак означающие «запомнить для всего этого конкретного сеанс входа в систему» ​​и «запомнить навсегда» соответственно.

4
27.01.2020, 21:18

Теги

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