I am new to bash and trying to write a script that disables kworker business as in aMaia’s answer here.
So far, I have this, which I run from root:
1 #!/bin/bash
2
3 cd /sys/firmware/acpi/interrupts
4 for i in gpe[[:digit:]]* # Don't mess with gpe_all
5 do
6 num=`awk '{print $1}' $i`
7 if (( $num >= 1000 )); then # potential CPU hogs?
8 # Back it up and then disable it!!
9 cp $i /root/${i}.backup
10 echo "disable" > $i
11 fi
12 done
But running it results in:
./kkiller: line 10: echo: write error: Invalid argument
What is going on here? I thought $i
was just the file name, which seems like the correct syntax for echo.
Suggestions for cleaning up/improving the script in general are also appreciated!
Update: With set -vx
added to the top of the script, here is a problematic iteration:
+ for i in 'gpe[[:digit:]]*'
awk '{print $1}' $i
++ awk '{print $1}' gpe66
+ num=1024908
+ (( 1024908 >= 1000 ))
+ cp gpe66 /root/gpe66.backup
+ echo disable
./kkiller: line 10: echo: write error: Invalid argument
Что то я не понимаю..
lsusb -t
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M
|__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/6p, 480M
|__ Port 4: Dev 4, If 0, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 4: Dev 4, If 1, Class=Human Interface Device, Driver=usbhid, 12M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M
|__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/6p, 480M
хочу отключить bus 1,
пытался к второй шине подключить..тот же результат..
lspci | grep USB
00:1a.0 USB controller: Intel Corporation 6 Series/C200 Series Chipset Family USB Enhanced Host Controller #2 (rev 05)
00:1d.0 USB controller: Intel Corporation 6 Series/C200 Series Chipset Family USB Enhanced Host Controller #1 (rev 05)
где глянуть поддерживает ли hub управление питанием? хотя точно поддерживает, это ноутбук..через laptop-mode-tools USB то отключаются…
vsafonin ★
(25.08.17 19:26:40 MSK)
- Ссылка
I am trying to setup a USB dongle on my device by following the post here. I wasn’t successful in setting it up and while tracing my steps discovered that
echo "1c9e:9ba1" > /sys/bus/usb-serial/drivers/generic/new_id
was resulting in an error. I ran this statement from the terminal and got the following response
bash: echo: write error: Invalid argument
according to the post here it means that the device doesn’t implement a WRITE method.
Wondering if there is a way to get the echo command to work so that I can get my USB modem working.
asked Feb 26, 2017 at 8:49
What happened when you remove the «:» as appear in the link you provided?
Original Answer:
echo 1c9e 6061 > /sys/bus/usb-serial/drivers/option1/new_id
Your case:
Instead of:
echo "1c9e:9ba1" > /sys/bus/usb-serial/drivers/generic/new_id
Try running:
echo "1c9e 9ba1" > /sys/bus/usb-serial/drivers/generic/new_id
answered Feb 26, 2017 at 9:09
4
Why can’t I use echo $1 > /sys/class/backlight/acpi_video0/brightness
in a simple bash script?
It gives me the error: echo: write error: Invalid argument
.
Garrett
4,0891 gold badge22 silver badges32 bronze badges
asked Feb 3, 2012 at 22:31
David ThorissonDavid Thorisson
1631 gold badge2 silver badges7 bronze badges
1
Try echo "$1" > /sys/class/backlight/acpi_video0/brightness
.
I bet the shell is expanding $1 and thus echo thinks it is receiving a bunch of arguments, rather than a string.
answered Feb 4, 2012 at 0:35
That file is a special file. It cannot be written to if what is written is not solely a number. If you try writing a number with echo
, you will get a newline character at the end. echo -n
solves the problem.
EDIT: Also, you might having the problem which I just had; that you need to be root and sudo
won’t help you for whatever reason, making it very tedious to type su
; <your command>; exit
all the time. For this I made an (overly ambitious) python script:
#!/usr/bin/python
from sys import *
PATH = "/sys/class/backlight/intel_backlight/brightness"
if len(argv) != 2:
print("Usage: bright.py <brightness>")
exit()
try:
brightness = int(argv[1])
if not 0 <= brightness <= 825:
raise Exception()
except:
print("<brightness> must be an integer between 0 and 825.")
exit()
if brightness == 0:
readString = raw_input("A value of 0 will turn off your screen. Are you sure you want to continue? [y/N] ")
if readString != "y":
exit()
elif brightness <= 5:
with open(PATH, "r") as f:
oldBrightness = int(f.read())
if brightness < oldBrightness:
readString = raw_input("A value of %i will make your screen very dark. Are you sure you want to continue? [y/N] " % brightness)
if readString != "y":
exit()
try:
with open(PATH, "w") as f:
f.write(str(brightness))
except:
print("Failed to write to file. Are you root?")
exit()
answered Jun 8, 2014 at 21:08
nijoakimnijoakim
1431 silver badge6 bronze badges
You should check what the actual value of $1
is. This error means you are trying to write an invalid value — either it’s out of range or just in general not a meaningful value.
At a glance, it appears that it accepts an integer in the range 0 to 8 (for me at least).
answered Feb 4, 2012 at 6:42
FatalErrorFatalError
2,1081 gold badge17 silver badges15 bronze badges
Try using let
#!/bin/bash
POLKU='/sys/class/backlight/radeon_bl0/brightness'
if [ $# -eq "0" ]
then
echo 100 > $POLKU
else
let gg=$1
echo $gg > $POLKU
fi
answered Dec 8, 2014 at 4:40
GuestGuest
413 bronze badges
Why can’t I use echo $1 > /sys/class/backlight/acpi_video0/brightness
in a simple bash script?
It gives me the error: echo: write error: Invalid argument
.
Garrett
4,0891 gold badge22 silver badges32 bronze badges
asked Feb 3, 2012 at 22:31
David ThorissonDavid Thorisson
1631 gold badge2 silver badges7 bronze badges
1
Try echo "$1" > /sys/class/backlight/acpi_video0/brightness
.
I bet the shell is expanding $1 and thus echo thinks it is receiving a bunch of arguments, rather than a string.
answered Feb 4, 2012 at 0:35
That file is a special file. It cannot be written to if what is written is not solely a number. If you try writing a number with echo
, you will get a newline character at the end. echo -n
solves the problem.
EDIT: Also, you might having the problem which I just had; that you need to be root and sudo
won’t help you for whatever reason, making it very tedious to type su
; <your command>; exit
all the time. For this I made an (overly ambitious) python script:
#!/usr/bin/python
from sys import *
PATH = "/sys/class/backlight/intel_backlight/brightness"
if len(argv) != 2:
print("Usage: bright.py <brightness>")
exit()
try:
brightness = int(argv[1])
if not 0 <= brightness <= 825:
raise Exception()
except:
print("<brightness> must be an integer between 0 and 825.")
exit()
if brightness == 0:
readString = raw_input("A value of 0 will turn off your screen. Are you sure you want to continue? [y/N] ")
if readString != "y":
exit()
elif brightness <= 5:
with open(PATH, "r") as f:
oldBrightness = int(f.read())
if brightness < oldBrightness:
readString = raw_input("A value of %i will make your screen very dark. Are you sure you want to continue? [y/N] " % brightness)
if readString != "y":
exit()
try:
with open(PATH, "w") as f:
f.write(str(brightness))
except:
print("Failed to write to file. Are you root?")
exit()
answered Jun 8, 2014 at 21:08
nijoakimnijoakim
1431 silver badge6 bronze badges
You should check what the actual value of $1
is. This error means you are trying to write an invalid value — either it’s out of range or just in general not a meaningful value.
At a glance, it appears that it accepts an integer in the range 0 to 8 (for me at least).
answered Feb 4, 2012 at 6:42
FatalErrorFatalError
2,1081 gold badge17 silver badges15 bronze badges
Try using let
#!/bin/bash
POLKU='/sys/class/backlight/radeon_bl0/brightness'
if [ $# -eq "0" ]
then
echo 100 > $POLKU
else
let gg=$1
echo $gg > $POLKU
fi
answered Dec 8, 2014 at 4:40
GuestGuest
413 bronze badges
- Печать
Страницы: [1] Вниз
Тема: Нету режима работы процессора ondemand (Прочитано 954 раз)
0 Пользователей и 1 Гость просматривают эту тему.

stlu
Здраствуйте,я новичок в линукс и меня интересуют несколько вопросов:
sudo cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
при вводе этой команды пишет что есть только 2 доступные режимы: performance и powersave,а я хочу поставить ondemand. Процессор вроде не старый (если от этого что-то зависит) intel core i5 9300H стоит ubuntu 18.04 LTS. При попытке этим способом допустим
for CPUFREQ in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do [ -f $CPUFREQ ] || continue; echo -n ondemand > $CPUFREQ; done
выдает bash: echo: ошибка записи: Недопустимый аргумент.
Возможно ли как-то установить самому этот режым? Или изменить ничего уже нельзя?
Буду благодарен за любую помощь.

ALiEN175
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
?
ASUS P5K-C :: Intel Xeon E5450 @ 3.00GHz :: 8 GB DDR2 :: Radeon R7 260X :: XFCE
ACER 5750G :: Intel Core i5-2450M @ 2.50GHz :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

stlu

The Green Side
Не смогу ответить на вопрос, но могу предложить обойти проблему.
gamemode
— утилита для изменения режима работы процессора в полуавтоматическом режиме. После установки модифицируете .desktop файл любого приложения таким образом:
Exec=gamemoderun steam
предварительно скопировав его в
.local/share/applications
И указанное приложение теперь активирует режим performance
При закрытии приложения режим powersave возвращается
Debian 11, Debian 11 Server

andytux
есть только 2 доступные режимы: performance и powersave
Значит только эти режимы есть у твоего процессора.
Посмотрел у себя: conservative ondemand userspace powersave performance schedutil. Выбран: ondemand.
lubuntu 18.04.
Возможно ли как-то установить самому этот режым? Или изменить ничего уже нельзя?
Нет. Нельзя.
« Последнее редактирование: 01 Февраля 2020, 07:26:57 от andytux »

xArtem1991x
Попробовал на KDE neon выполнить команду
sudo cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
Пишет — Нет такого файла или каталога

andytux
xArtem1991x, скопировал твою команду, вставил, выполнил. Запросила пароль, вывела список.
Как минимум, в команде нет ошибок. Как вариант, посмотри глазами, что там у тебя есть.

Pilot6
у свежих интелов нет ondemand, вы читаете старые инструкции. Сейчас используется intel psave. Там всего два варианта. И работает он лучше. Можно забубенить даже на новом железе старорежимный драйвер, можете попробовать найти в сети как это делается. Только непонятно зачем это нужно. По умолчанию стоит powersave, он во всех отношениях лучше ondemand.
Я в личке не консультирую. Вопросы задавайте на форуме.

ALiEN175
ASUS P5K-C :: Intel Xeon E5450 @ 3.00GHz :: 8 GB DDR2 :: Radeon R7 260X :: XFCE
ACER 5750G :: Intel Core i5-2450M @ 2.50GHz :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Pilot6
Посмотрел у себя: conservative ondemand userspace powersave performance schedutil. Выбран: ondemand.
У вас cpu небось не интел.
Я в личке не консультирую. Вопросы задавайте на форуме.

andytux
У вас cpu небось не интел.
Интел, очень древний. SpeedStep тогда только появился.

Pilot6
Интел, очень древний.
Если проц не поддерживает pstate — тогда нормально. У меня на amd тоже ondemand есть.
Я в личке не консультирую. Вопросы задавайте на форуме.
- Печать
Страницы: [1] Вверх
2 ответа
Никхил опубликовал «Ошибка при включении SSD» для SSD < a> в список рассылки блокировок Linux и получил ответ от Кейта Буша:
Обязательно включите очереди опроса в драйвере nvme. По умолчанию их нет. Параметр ядра для [sic] их включения:
nvme.poll_queues=X
Где «X» — количество очередей на опрос. Я бы порекомендовал хотя бы 1 на сокет ЦП, но лучше больше.
Судя по виду ответ от Nik > кажется, что io_poll
можно было установить в 1 после внесения вышеуказанного изменения.
Для контекста, просматривая исходный код ядра, вы можете Ядро 5.0 представило параметр NVMe poll_queues
(это также упоминается в раздел хранилища журнала изменений ядра для новичков версии 5.0). Кроме того, 5.0 фиксация по умолчанию poll_queues
в 0 (на момент написания в конце 2019 года мы сейчас используем 5.5-rc2 и это все еще так).
Кроме того, похоже, что Фрэнк Обер (который отправил ответ на этот вопрос как @FrankO) спросил «почему было внесено изменение» в » Проведен опрос io для ядра Linux 5.x «Блокировка списка рассылки Linux, а также получено ответ Кита:
Исходная реализация опроса разделяла ресурсы, которые генерируют прерывания. Это не позволяет ему работать с максимальной скоростью, поэтому теперь используются выделенные очереди опроса.
1
Anon
28 Дек 2019 в 11:05
Этот блог, на который вы ссылаетесь, родился во времена ядер 4.x, с тех пор концепции отправки ввода-вывода io_uring появились во временных рамках ядра 5.x.
Прочтите этот документ о io_uring: https://kernel.dk/io_uring.pdf
Вы должны протестировать накопитель Optane с помощью: ioengine = io_uring
С хипри или без него, если вы хотите использовать bio_poll или нет.
Вот что должно сработать при переходе на fio:
[global]
direct=1
filename=/dev/nvme1n1
log_avg_msec=500
time_based
percentile_list=1:5:10:20:30:40:50:60:70:80:90:95:99:99.5:99.9:99.95:99.99:99.999:99.9999
[rand-read-4k-qd1]
runtime=120
bs=4K
iodepth=1
numjobs=1
cpus_allowed=0
ioengine=io_uring
hipri
rw=randread
uname -a
5.4.1-1.el8.elrepo.x86_64
CentOS 8
Удачи, Фрэнк Обер
0
FrankO
16 Дек 2019 в 20:40
Я использую следующую команду как пользователь root, чтобы включить опрос ядра Linux для устройства NVMe SSD.
# эхо 1> / sys / block / nvme2n1 / queue / io_poll
Я получаю следующую ошибку: bash: echo: ошибка записи: недопустимый аргумент
Сведения об ОС: Ubuntu 16.04, ядро Linux 5.0.0+.
Есть указатели?
Ссылки на команду: https://itpeernetwork.intel.com/tuning-performance-intel-optane-ssds-linux-operating-systems/#gs.1yu3o1
https://lwn.net/Articles/663543/
person
Nikhil Sambhus
schedule
18.03.2019
source
источник
Ответы (2)
Никхил опубликовал «Ошибка при включении SSD-накопителя <». a> в список рассылки блокировок Linux и получил ответ от Кейта Буша:
Обязательно включите очереди опроса в драйвере nvme. По умолчанию их нет. Параметр ядра для [sic] их включения:
nvme.poll_queues=X
Где «X» — количество очередей на опрос. Я бы порекомендовал хотя бы 1 на сокет ЦП, но лучше больше.
По внешнему виду ответ от Nik > кажется, что io_poll
можно было установить в 1 после внесения вышеуказанного изменения.
Для контекста, просматривая исходный код ядра, вы можете Ядро 5.0 представило параметр NVMe poll_queues
(это также упоминается в раздел хранилища журнала изменений ядра Kernel Newbies 5.0). Кроме того, 5.0 фиксация по умолчанию poll_queues
в 0 (на момент написания в конце 2019 года мы в настоящее время используем 5.5-rc2, и это все еще случай).
Кроме того, похоже, что Фрэнк Обер (который отправил ответ на этот вопрос как @FrankO) спросил «почему было внесено изменение» в » Проведен опрос io для ядра Linux 5.x » Блокировка списка рассылки Linux, а также получено ответ Кита:
Исходная реализация опроса разделяла ресурсы, которые генерируют прерывания. Это не позволяет ему работать с максимальной скоростью, поэтому теперь используются выделенные очереди опроса.
person
Anon
schedule
19.12.2019
Этот блог, на который вы ссылаетесь, родился во времена ядер 4.x, с тех пор концепции отправки ввода-вывода io_uring появились во временном интервале ядра 5.x.
Прочтите этот документ о io_uring: https://kernel.dk/io_uring.pdf
Вы должны протестировать оптический привод Optane с помощью: ioengine = io_uring
С хипри или без него, если вы хотите использовать bio_poll или нет.
Вот что должно сработать при переходе на fio:
[global]
direct=1
filename=/dev/nvme1n1
log_avg_msec=500
time_based
percentile_list=1:5:10:20:30:40:50:60:70:80:90:95:99:99.5:99.9:99.95:99.99:99.999:99.9999
[rand-read-4k-qd1]
runtime=120
bs=4K
iodepth=1
numjobs=1
cpus_allowed=0
ioengine=io_uring
hipri
rw=randread
uname -a
5.4.1-1.el8.elrepo.x86_64
CentOS 8
Удачи, Фрэнк Обер
person
FrankO
schedule
16.12.2019
# |
|
Темы: 5 Сообщения: 28 Участник с: 30 июня 2011 |
Доброго времени суток!!! имеется девайс huawei e369. Во время работы иногда отваливается, решается отключением/подключением к юсб. Задача: реализовать это программно, т.е чтобы модем отключался/подключался не аппаратно, а программно. вот что сделал: через ls /sys/bus/usb/devices определил куда подключен модем. /sys/bus/usb/devices/2-1 тут модем живет. bash: echo: ошибка записи: Недопустимый аргумент включатся должно так echo on > /sys/bus/usb /devices/2-1/power/level |
Natrio |
# |
Темы: 47 Сообщения: 4765 Участник с: 08 января 2011 |
Собрать, как же ещё это сделать. Правда, есть подозрения, что имеется некий другой способ отключения USB-девайса, реализованный в udisks –detach , что работает на стандартной сборке ядра. У меня так пока и не дошли руки распотрошить udisks, чтобы найти как это там сделано. |
pavel |
# |
Темы: 5 Сообщения: 28 Участник с: 30 июня 2011 |
а udisks будет именно питание отключать??? что-то как я понял он просто отмаунтивает устройства. а способ которым я пробую пишут что работает, только ядро должно быть с соответсвующими параметрами собрано. собственно в этом и проблема, я ядро ниразу не пересобирал, вот и возникают трудности. |
Natrio |
# |
Темы: 47 Сообщения: 4765 Участник с: 08 января 2011 |
udisks –unmount отмонтирует, а udisks –detach отключает флешку так, что она гаснет и полностью исчезает из устройств. Вот питание вольтметром не замерял, но вы можете проверить |
sirocco |
# |
Темы: 29 Сообщения: 2501 Участник с: 25 июля 2007 |
Во-первых, в стандартном ядре арча есть такая опция
$ zgrep -i suspend /proc/config.gz CONFIG_USB_SUSPEND=y Во-вторых, питание на USB этими командами не снимается (и вообще, афаик, снятие питания на шине USB стандартом не предусмотрено). Команда suspend (on) относится только к устройству на шине USB. М.б. поможет — unbind/bind для устройства. |
VlaoMao |
# |
Темы: 15 Сообщения: 306 Участник с: 23 января 2011 |
Не катит, только что замерял вольтметром. После eject напряжение как и было 5В, а после detach флешка вообще нервно моргать светодиодом стала |
VlaoMao |
# |
Темы: 15 Сообщения: 306 Участник с: 23 января 2011 |
Кстати, вот документация на это дело: http://www.mjmwired.net/kernel/Document … gement.txt Мельком пробежал, может что упустил, но вроде так просто питание с порта не отключить, к сожалению. |
shtrihs |
# |
Темы: 13 Сообщения: 44 Участник с: 22 сентября 2014 |
Понимаю, что срок большой. Но может есть решение с данным вопросом? Мне тоже надо так отключать модем |
vasek |
# (отредактировано 3 года назад) |
Темы: 47 Сообщения: 11417 Участник с: 17 февраля 2013 |
shtrihs, уже несколько раз описывал в разных топиках как это делается (два способа), поищи — лень все писать по новой.
PS — у меня накрылась (точнее частенько глючит и сыпит ошибками) шина с вебкамерой — пришлось написать юнит, который отключает при старте эту шину (на этой шине два порта, приходится обходится двумя другими). EDIT 1 — Если коротко — находишь шину, далее два способа, смотря что нужно
2. Отключение/включение шины (физический порт) USB (authorized)
Ошибки не исчезают с опытом — они просто умнеют |
shtrihs |
# |
Темы: 13 Сообщения: 44 Участник с: 22 сентября 2014 |
Это я всё пробывал. Не отрубает питание Есть четкая последовательность действий http://sysadm.pp.ua/linux/usb.html Но у меня не срабатывает, так как CONFIG_USB_SUSPEND не включена. У меня Ubuntu 18.04 grep CONFIG_USB_SUSPEND /boot/config-4.15.0-76-generic Вот в инете нашёл ««Starting with the 3.10 kernel release, dynamic PM support for USB is present whenever the kernel was built with CONFIG_PM_RUNTIME enabled. The CONFIG_USB_SUSPEND option has been eliminated.»» Это действительно так? Как тогда быть? Ядро я пересобирать не умею. А где найти дистрибутив с включенной опцией, мне так и не понятно. |