Собственно, сабж. Есть два компа, на которых установлены debian sid (ядра 30 и 32), одно время стоял на одном из них арч с 30м ядром, поэтому не думаю, что в этом дело.
Проблема в том, что когда идёт запись на флешку, скорость очень низкая (сначала, когда пишет в кэш, всё хорошо, но потом она падает до ~500-700 кбайт/с и система начинает довольно сильно тормозить. Причем тормоза настолько сильные, что иногда иксы виснут намертво на несколько минут.
Что забавно, проверял на серваке с 26м ядром, там всё нормально (тоже debian).
Кстати, внятного ответа в интернетах не нашлось :( Вроде компьютеры не особо древние (оба Athlon 64 X2 с сата-винтами)
Это /var/log/dmesg
Наболело :( Хотел запостить в пятиминутке ненависти. Но, может, это просто у меня руки кривые.
Решено by evgenyl
Ты поставл маски на обработку прерываний 21,22,23 чтобы они обрабатывались только на 0ом процессоре
выше ты мне присылал
1
2
3
4
5
|
cat /proc/interrupts
21: 45801 9374917 IO-APIC-fasteoi ehci_hcd:usb2, HDA Intel
22: 1 28 IO-APIC-fasteoi ohci_hcd:usb4
23: 1827 188061 IO-APIC-fasteoi ehci_hcd:usb1, ohci_hcd:usb3 |
видишь, они отвечают за USB, когда копируешь, прерывания балансируются между процессорами, скорее всего блок памяти при передачи прерывания один и процессоры поочередности к нему обращаются, тем самым вызывая глобальную блокировку
На других машинах нужно посмотреть какие прерывания обслуживают USB и зафиксировать их, а не 21,22,23
в данном случае зафиксировать так
echo 1 > /proc/irq/21/smp_affinity
echo 1 > /proc/irq/22/smp_affinity
echo 1 > /proc/irq/23/smp_affinity
зафиксируй и попробуй снова по копировать
Для автоматизации наваял скрипт, который детектит прерывания, на которых висят usb и указывает, какой процессор выполняет работу с ними, скопировал его в /usr/local/bin и засунул его в загрузку системы (прописал /usr/local/bin/setusbwrite в /etc/init.d/rc.local)
1
2
3
4
5
6
|
#!/bin/sh
for interruption in `cat /proc/interrupts | grep usb | 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 |
-
но потом она падает до ~500-700 кбайт/с и система начинает довольно сильно тормозить. Причем тормоза настолько сильные, что иногда иксы виснут намертво на несколько минут.
Кстати, в ubuntu часто тоже бывала такая фигня. Не уверен, что причина та же, но факт есть факт - при копировании начинала дергаться рывками мышь и даже виснуть иксы...
-
-
известная ерунда-надо использовать другой IO планировщик, проблема обсуждалась на многих форумах.
-
Видел 2 причины, плохой кабель либо слишком длинный.
И вторая копируеш объем больше чем кол-во опертивки смотриш htop и там увидиш что почемуто буфер вытесняет иксы и всесь софт в своп :(
имхо у тебя 2я причина
-
-
Написал внятный ответ и получил минус :), спасибо, отбивает желание вообще комунибуть чем нибуть помогать :\
-
-
Не нужно обижаться, возможно просто не туда ткнули.
Это бывает.
-
Глюки возникают при подключении в любой usb-разъём. К тому же под виндами глюков не наблюдалось. Проблема не аппаратная
У меня 4 гига оперативки. Файлы гиг-полтора
-
-
всетаки проверь если не трудно, растет ли своп когда копируеш
еще попробуй примонтировать флэшку с опцией sync и будут ли тормоза в таком режиме ?
-
-
с опцией sync скорость сразу низкая и интерфейс тормозит.
Насчет свопа чуть попозже проверю.
Но на одном компе, где 4 гига ОЗУ, свопа нету, и памяти дофига свободной, а тормоза есть
-
-
Если с sync тормозит интерфейс своп можеш не проверять дело не в нем.
digiwhite написал про планировщик попробуй поменяй
Если не поможет, проверь, возможно стоит управление питанием, проц меняет частоту налету, это мешает работе usb, можно просто посмотреть cat /proc/cpuinfo если не максимальная значить меняется
Еще бывает так что флэшки форматированны без таблицы разделов прям сразу /dev/sda
а вообще попробуй переворматировать ее под линуксом сделать новую таблицу разделов и заного отформатировать раздел. Бывает такое тоже помогает.
У меня 2 transcend флэшки, если под виндой форматировать, под линуксом страшно глючат, почему хз :\
-
-
мои флешки монтируется через pmount руками
разделы как полагается /dev/sdb1 и т. п.
форматировал и под виндой, и чере mkfs.vfat - не помогает
На домашнем компе не стоит никаких демонов, меняющих частоту. Я так понимаю, что-то вроде cpufrecutils или fanspeed.
В том-то и дело, что, вроде, причины и нету :(
-
-
не демонов не нужно никаких, ядро само умеет без демонов, это если говернер userspace стоит тогда демон будет менять
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
еще покажи свой cat /proc/interrupts
-
-
oni ~ $ sudo cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
cat: /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor: Нет такого файла или каталога
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
oni ~ $ cat /proc/interrupts
CPU0 CPU1
0: 44 0 IO-APIC-edge timer
1: 1990 160359 IO-APIC-edge i8042
4: 0 2 IO-APIC-edge
6: 0 4 IO-APIC-edge floppy
7: 1 0 IO-APIC-edge parport0
8: 0 0 IO-APIC-edge rtc0
9: 0 0 IO-APIC-fasteoi acpi
14: 2974 283760 IO-APIC-edge ide0
20: 9023 1109893 IO-APIC-fasteoi ahci, nvidia
21: 45801 9374917 IO-APIC-fasteoi ehci_hcd:usb2, HDA Intel
22: 1 28 IO-APIC-fasteoi ohci_hcd:usb4
23: 1827 188061 IO-APIC-fasteoi ehci_hcd:usb1, ohci_hcd:usb3
31: 5093 506109 PCI-MSI-edge eth0
NMI: 0 0 Non-maskable interrupts
LOC: 11215761 9488630 Local timer interrupts
SPU: 0 0 Spurious interrupts
PMI: 0 0 Performance monitoring interrupts
PND: 0 0 Performance pending work
RES: 12108215 10930624 Rescheduling interrupts
CAL: 3167 18261 Function call interrupts
TLB: 26722 25399 TLB shootdowns
TRM: 0 0 Thermal event interrupts
THR: 0 0 Threshold APIC interrupts
MCE: 0 0 Machine check exceptions
MCP: 55 55 Machine check polls
ERR: 1
MIS: 0
|
-
-
Если нет файла значить не меняет частоту
Планировщик IO менял ? или незнаеш как ?
можно попробовать привязать прерывания 21,22,23 на 0й проц
нужно отлучится попозже напишу как.
-
-
все ядра, на которых проверялись - дефолтные от дистрибутивов. То есть там планировщик по-умолчанию
-
-
так прерывания зафиксировать так
echo 1 > /proc/irq/21/smp_affinity
echo 1 > /proc/irq/22/smp_affinity
echo 1 > /proc/irq/23/smp_affinity
зафиксируй и попробуй снова по копировать
по поводу планировщика
cat /sys/block/sda/queue/scheduler
будет чтото вроде
noop deadline [cfq]
это значить есть noop, deadline, а сейчас активен cfq
можно поменять для sda например
echo noop > /sys/block/sda/queue/scheduler
-
-
Вроде первое помогло. большое спасибо.
А где поподробнее можно почитать, что было сделано?
-
-
Ты поставл маски на обработку прерываний 21,22,23 чтобы они обрабатывались только на 0ом процессоре
выше ты мне присылал
cat /proc/interrupts
1
2
3
|
21: 45801 9374917 IO-APIC-fasteoi ehci_hcd:usb2, HDA Intel
22: 1 28 IO-APIC-fasteoi ohci_hcd:usb4
23: 1827 188061 IO-APIC-fasteoi ehci_hcd:usb1, ohci_hcd:usb3 |
видиш они отвечают за USB, когда копируеш, прерывания балансируются между процессорами, скорее всего блок памяти при передачи прерывания один и процессоры поочередности к нему обращаются, тем самым вызывая глобальную блокировку
почитать какуюнибуть книгу о ядре тут вроде ктото недавно давал ссылку на подобную
-
Только смотри, на других машинах нужно посмотреть какие прерывания обслуживают USB и зафиксировать их, а не 21,22,23
-
Вы могли бы более точно и полнее описать решение, которое вам помогло и убрать его под кат?
Так вы и для себя более четко уясните что и как и остальным будет потом проще понять, что произшло.
-
Но, может, это просто у меня руки кривые.
нет, это у девелоперов ядра они кривые, и такое ощущение что с каждым ядром их выкручивает все больше и больше, я сам подумываю поставить какое нибудь 2.16 ядро, с ним у меня самые положительные ассоциации
-
-
Как вариант, возможно на дефолтных ядрах что-то отключено. Вопрос тогда в том, что же нужно включить при перекомпилляции
-
Тормоза интерфейса могут быть обусловлены испольщуемым планировщиком ввода/вывода. Но т.к. еще и скорость записи низкая....
-
на любой флешке или только на какой-то одной?
-
-
пробовал штуках на пяти. На всех грустно. На некоторых чуть быстрее, на некоторых медленее. Но везде всё плохо
-
-
они точно как усб2.0 работают в линухе? )
-
-
читает с них как полагается > 10 мбайт/с
Есть подозрение, что копать нужно в сторону чипсета
-
подтверждаю, испытано на десктопе и 2-ух ноутах (сейчас везде стоит Ubuntu 9.10): был acer 5315, сейчас HP2140 и на разных флешках, при записи больших файлов по 300-1400 Мб скорость сначала в несколько Мбит, потом скатывается на сотни кбит, и началось это дело еще в Ubuntu 8.10
а вот запись на USBhdd с ntfs идет с нормальной более менее стабильной скоростью...
-
-
Угу, жесткий диск внешний работает хорошо. Хотя при копировании двух фильмов по 6 гигов, к концу скорость тоже упала. Но тормозов не было. И это было написано в оффициальном факе ntfs-3g. Так что это можно считать нормальным и виной была старая версия драйвера.
-
А мне что-то данное решение (с фиксацией прерываний) не помогло. Блин, на флешку из Linux даже трёхгигабайтный файл не передашь. Только у меня не X-ы падают, а отрубается wi-fi.
Что-то мне кажется, что на 2.6.31 такой проблемы не было. Я не помню, чтобы я мучался с записью файла.
-
-
Блин, на флешку из Linux даже трёхгигабайтный файл не передашь.
файловая система флешки?
-
вниз пробуй все что я писал
и по каждому пункту симптомы плюс немного больше информации что за машина сколько процов оперативки ?
-
У меня под Ubuntu была такая же проблема, но решилась (вроде бы) по-другому, по инфе из длинного бага http://bugs.launchpad.net/ubuntu/+source/gvfs/+bug/197762?comments=all
Добавил в загрузку ядра параметр "elevator=noop" - после этого пока что проблемы не замечал, скорость записи на флешки стабильная.
-
Для автоматизации наваял скрипт, который детектит прерывания и указывает, какой процессор выполняет работу с прерываниями, на которых "висят" usb и засунул его в загрузку системы
1
2
3
4
5
6
|
#!/bin/sh
for interruption in `cat /proc/interrupts | grep usb | 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 |
|
|
|
Последние посты
|
|
Последние комментарии
|
|
Изменения
|
|
Черновики (все)
|
|
Избранное (всё)
|
|
|