12309
12309 — почти ставший легендой баг в ядре Linux. Проявляется как жуткие тормоза системы при копировании данных на диск или флеш‐накопитель. Тормозить при этом начинает не только программы, связанные с записью, но и вся ОС.
Матчасть
Почему это происходит? А также, почему этого не происходит с другими ОС? Дело в том, что в некоторых дистрибутивах Linux задачам ввода‐вывода ставится по умолчанию высокий приоритет, то есть они получают больше процессорного времени, чем та же графическая подсистема. В Windows, например, процессу, с окном которого работает пользователь по умолчанию ставится высокий приоритет.
Как бороться?
Есть несколько способов. Здесь я опишу некоторые из них:
- На многоядерных системах можно переставить задачу обработки прерываний на одно ядро.
<syntaxhighlight lang= bash> for interruption in `grep usb /proc/interrupts | awk '{print $1}'| sed 's/\://g'` ; do
echo 1 > /proc/irq/${interruption}/smp_affinity;
done </syntaxhighlight>
- Поменять планировщик задач CFS на BFS, который этой проблемой не страдает. В этом случае может помочь патчсет ядра под названием pf-kernel.
- Не пользоваться дистрибутивом, где операциям ввода‐вывода по умолчанию ставится высокий приоритет. Или же поменять его :-)
- Пользоваться ядром версии 4.10 и выше, где этот баг был окончательно исправлен.