Skaaraje Опубликовано 19 мая, 2023 Опубликовано 19 мая, 2023 (изменено) При копировании с/на USB девайсы начинались ужасающие тормоза системы вплоть до невозможности разблокировать сессию. Все работало медленно (очень и печально) во время копирования. Гугление показало вот что: (далее цитирую) Проблема заключается в том, что когда идёт запись на флешку, скорость очень низкая (сначала, когда пишет в кэш, всё хорошо, но потом она падает до ~500-700 кбайт/с и система начинает довольно сильно тормозить. Причем тормоза настолько сильные, что иногда иксы виснут намертво на несколько минут. Как выяснилось эмпирически, это случается из-за переключения процессоров и блокировок при использовании общего блока памяти. Логично решение указать, чтобы процессоры не переключались при обработки прерываний, на которых находятся usb. Сначала в биосе отключаем опцию usb legacy support, заходим в систему и смотрим какие прерывания используются usb, для этого делаем: grep usb /proc/interrupts 16: 27 0 IO-APIC 16-fasteoi ehci_hcd:usb1 23: 0 29 IO-APIC 23-fasteoi ehci_hcd:usb2 где 16 и 23 это прерывания на которых сидит USB Далее можно узнать на каком процессоре сейчас все прерывания usb root@lnv:/home/paul# cat /proc/irq/16/smp_affinity 1 root@lnv:/home/paul# cat /proc/irq/23/smp_affinity 1 на 1 потому что я уже все их сделал на 1, до этого было на 3 Теперь, что это значит 3 в шестнадцатеричной системе = 00000000.00000011 в двоичной (так как ядро скомпилировано с поддержкой 16 процессоров) то есть обрабатыватся на CPU0, CPU1 Если нам нужно указать, чтобы обработка шла только на CPU0, то нужно задать 00000000.00000001, то есть 1 Если же нужно указать, чтобы обработка шла только на CPU1, то нужно задать 00000000.00000010, то есть 2 Теперь укажем, что будем обрабатывать на CPU0 все прерывания с висящими на них usb, естественно, всё делать нужно под рутом. При загрузке Вот такой скриптец #!/bin/sh for interruption in `grep usb /proc/interrupts| awk '{print $1}'| sed -e 's/\://g'` ; do echo "Setting 1 in /proc/irq/${interruption}/smp_affinity"; echo 1 > /proc/irq/${interruption}/smp_affinity; done положить например в /usr/bin И прописать его в rc.local если есть или в /etc/init.d ! И реально - сейчас копирует файл 50гиг на MicroSD убогую в ридере, я при этом пишу нормально и вкладки в опере переключаются и ваще почти без тормозов. Источник Изменено 19 мая, 2023 пользователем Skaaraje Цитата
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.