Повышение скорости выполнения скрипта яркости экрана

Я нашел кое-что, что мне подходит. Это решение может быть плохой идеей для тех, кто заботится о безопасности, например как предотвращение взаимодействия контейнера с хостом. Я действительно не понимаю всех последствий своего решения. Я запускаю только свой собственный код внутри LXC с тестами Jenkins, поэтому для меня это не проблема.

Я нашел здесь: https://libvirt.org/drvlxc.html#fsmounts :

Следующие специальные средства монтирования устанавливаются libvirt

 / proc / sys хост "/ proc / sys "bind-mount-only read-only 
 

Я до сих пор не понимаю, почему внутри сетевого пространства имен по умолчанию внутри LXC я могу установить sysctl , но внутри других сетевых пространств имен я не могу.

Я добавил явное монтирование / proc / sys в XML конфигурации контейнера:


...
  
    
    
  

Это позволило мне установить sysctl как внутри контейнера LXC по умолчанию, так и в дополнительных пространствах имен. {{{ 1}} Я боялся, что настройки внутри LXC также повлияют на хост, но это не так. Теперь все сетевые пространства имен (хост, LXC по умолчанию, LXC custom) имеют независимую запись (от root) sysctl без необходимости перемонтировать каждый раз. Или, по крайней мере, то, что сообщает запрос sysctl .

3
16.05.2016, 00:37
2 ответа

Если код уже работает, но выполняется слишком медленно, следующий шаг - начать профилирование. При написании сценариев shell можно использовать time (попробуйте help time, чтобы посмотреть его справочную страницу), чтобы увидеть, сколько времени занимает выполнение каждой команды.

Я думаю, что bc должна быть очень быстрой; sed против одной строки также должен быть очень быстрым; и grep тоже должен быть довольно быстрым, поэтому я решил попробовать профилировать эти две команды xrandr на своей системе. Мне просто нужны были некоторые быстрые оценки, поэтому я попробовал выполнить команды по отдельности (вместо того, чтобы, скажем, обернуть их в сценарий, чтобы запустить их десятки раз для получения среднего значения):

$ time xrandr --prop --verbose >/dev/null

real    0m0.428s
user    0m0.004s
sys     0m0.004s
$ time xrandr --output LVDS1 --brightness 0.9

real    0m0.117s
user    0m0.000s
sys     0m0.008s
$ 

Если вы получите похожие результаты, возможно, ваш запрос занимает больше всего времени.

1
27.01.2020, 21:22

Ну, во-первых, вы запускаете три отдельные внешние программы, когда достаточно было бы одной. Вы могли бы сделать весь разбор и арифметику в awk, например:

xrandr --output LVDS-1 --brightness $(xrandr --prop --verbose | 
    awk "/Brightness:/{print \$2 $1 0.1; exit}")

exit в сценарии awk гарантирует, что ему не нужно разбирать весь вывод xrandr --prop --verbose и он выходит после первого совпадения для Brightness:. Затем, поскольку команда awk заключена в двойные кавычки, $1 расширяется до аргумента, переданного скрипту, а \$2 относится ко второму полю в awk, поскольку оно экранировано.

Вы также можете попробовать использовать более быструю оболочку. Если по умолчанию используется bash, попробуйте запустить сценарий с dash.

2
27.01.2020, 21:22

Теги

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