Титла: Висок load при четене/писане на диска на 64 битова система Публикувано от: senser в Jul 07, 2010, 14:07 Здравейте,
Проблемът предполагам е познат за част от вас, но все пак ще поясня: Системата е 64 битово Gentoo, с последните версии на всичко. Кернела, който ползвам е 2.6.34-zen1, но това надали има голямо значение, тъй като съм пробвал с какви ли не кернели от 2.6.30 насам (приблизително) и няма разлика. При четене или писане на диска натоварването на системата скача драстично, а скоростта на четене/писане измерена с iotop в пиковите си моменти е не повече от 2,5-3МБ/с, но иначе нормално се движи под 1МБ/с. Код: Total DISK READ: 9.74 K/s | Total DISK WRITE: 0.00 B/s Проблемът не е във файловата система - почти няма разлика при различните. Хардът също е ОК и производителността му измерена с hdparm е нормална: Код: hdparm -tT /dev/sda Проблемът се дискутираше във форума на gentoo, но нещо замря: http://forums.gentoo.org/viewtopic-t-482731-postdays-0-postorder-asc-start-925.html ($2). Там имаше различни предположения, но повечето витаеха около това, че 64 битовите системи са засегнати значително повече от 32 битовите и, че е "замесен" disk scheduler-a. Пробвал съм и с трите различнi scheduler-a и няма промяна, поне не и осезаема. Ползвам компютъра за ежедневна работа, и предполагам, че го натоварвам малко повече от средностатистически потребител, защото освен браузър, офис, музика и т.н. имам пуснати апач и mysql, но въпреки това не мисля, че е нормално натоварването на системата да е постоянно около 1-ца, а програмите да се стартират понякога за минути. Това, което ми направи впечатление вчера е io статистиката на произволен процес, която изглежда така: Код: # less /proc/1/io и по-точно последния брояч cancelled_write_bytes. За него намерих следното тук http://www.kernel.org/doc/Documentation/filesystems/proc.txt ($2): cancelled_write_bytes --------------------- The big inaccuracy here is truncate. If a process writes 1MB to a file and then deletes the file, it will in fact perform no writeout. But it will have been accounted as having caused 1MB of write. In other words: The number of bytes which this process caused to not happen, by truncating pagecache. A task can cause "negative" IO too. If this task truncates some dirty pagecache, some IO which another task has been accounted for (in its write_bytes) will not be happening. We _could_ just subtract that from the truncating task's write_bytes, but there is information loss in doing Дали относително високия процент cancelled_write_bytes (), може да има връзка с високия load при входно изходни операции или дайте други идеи, ако имате. П.П. Сега се сетих за един елементарен тест, който пробвах: Код: dd if=/dev/zero of=/mnt/test bs=512k count=1024 Прави ми впечатление, че май когато един процес прави дисковата операция (четене или писане) скоростта е добра, но когато няколко конкурентни процеса се борят за достъп, скорстта пада драстично ..... ако може да се вярва на iotop де. Титла: Re: Висок load при четене/писане на диска на 64 битова система Публикувано от: shadowx в Jul 07, 2010, 14:14 DMA върви ли ?
Титла: Re: Висок load при четене/писане на диска на 64 битова система Публикувано от: senser в Jul 07, 2010, 14:49 DMA върви ли ? Код: hdparm -i /dev/sda Титла: Re: Висок load при четене/писане на диска на 64 битова система Публикувано от: Naka в Jul 07, 2010, 15:22 Цитат Хардът също е ОК и производителността му измерена с hdparm е нормална:Не изглежда да е добре. Трябва да дава много повече от 29.03 MB/sec. това е UDMA 100 хард. а е включен на *udma2. udma2 ограничава на около 30мб/сек (овен ако наистина не е бавен хард) Цитат UDMA modes: udma0 udma1 *udma2 udma3 udma4 udma5Виж къде е звездичката. А трябва да е на *udma4 или *udma5 Ти с какъв ide кабел си? с 40 или 80 жилен (ATA66). Защото ако с обикновен точно това ще се получава. Какво е дъното и какъв е чипсета. Виж си също и биоса да не би отам да е ограничено. Титла: Re: Висок load при четене/писане на диска на 64 битова система Публикувано от: senser в Jul 08, 2010, 08:37 По-принцип си прав и още при буутване кернела си казва, че кабела е 40 жилен: Код: ata1.00: limited to UDMA/33 due to 40-wire cable Чипсета е SiS, лаптопа е FSC. Но въпреки това продължавам да твърдя, че не е там проблема - все пак скорост измерена с hdparm от 30МБ/с (дори и да не е максимално възможната за диска) е достааааа далече от скорост от 1МБ/с в процес на нормална работа. Отделно каквото и четене и писане да правиш по диска не е нормално да ти спира часовника, мишката и компа да е замръзнал. Не помня да съм пускал скоро уиндоус за да кажа там как е, но съм на 99%, че проблемът ще отстъства - поне последните пъти, когато съм пускал вин си беше ОК. Титла: Re: Висок load при четене/писане на диска на 64 битова система Публикувано от: gat3way в Jul 08, 2010, 10:35 Ми нормално да е доста далече. hdparm теста е sequential четене от блоковото устройство и въобще не се минава през vfs слоя, това обикновено няма нищо общо с реалния workload. В реалността, четенето от диска въобще не е последователно, причините са много - четеш различни файлове, които са разположени на различни места по диска, дори да четеш един голям файл, нямаш гаранция че е разположен на последователни блокове - фрагментацията си съществува и при ext3 файлови системи противно на това което повечето хора си мислят. При всяко четене на файл, променяш atime на файла, това се отразява на журнала, който в един момент трябва да се commit-не. Всъщност, най-бавното нещо при харддисковете е времето за което главата прескача на друга пътечка, колкото по-*далеч* е тя, толкова по-бавно става. Операционните системи се стараят да го минимизират, използвайки въпросните I/O scheduler-и, като обикновено идеята е дисковите операции да не се изпълняват веднага, а да влизат в една структура и да се изпълняват в друга последователност така че seek time-a да се минимизира. И в общият случай затова I/O scheduler-ите се наричат "elevator"-и, защото това което правят е че постоянно сноват по диска от първата до последната пътечка и обратно и подреждат I/O заявките така че да следват тия разходки нагоре-надолу. Разликите между anticipatory, deadline и etc политиките са главно по начина по който новите заявки се обработват - възможно е примерно "разходката" нагоре-надолу да бъде нарочно забавена ако се *очаква* да пристигне нова I/O заявка, която да изчете нещо от следващата пътечка, с цел да не чака докато "разходката" стигне до последната пътечка и после се върне до тази. Такива работи.
Ако примерно I/O scheduler-а е _счупен_ поради някаква причина в това ядро, както твърдят онези в онзи форум, тогава това поведение въобще не е странно - резултатите биха били по принцип плачевни. Титла: Re: Висок load при четене/писане на диска на 64 битова система Публикувано от: senser в Jul 08, 2010, 12:13 gateway, съгласен съм с теб - наистина скоростта измерена с hdparm или dd не може да се сравнява при реален workload.
Но лоада на с-мата да е постоянно около и над 1 и в същото време процесора да почива някак си не ми се струва нормално. Сега се присещам и за още един момент който е свързан - при монтиране на някаква мрежова ФС, sshfs, nfs ... etc и без никакво четене или писане лоада скача чувствително, особено ако поради някаква причина връзката с отдалечената ФС се лагне Да разбирам ли, че никой не мисли, че има връзка с cancelled_write_bytes Титла: Re: Висок load при четене/писане на диска на 64 битова система Публикувано от: gat3way в Jul 08, 2010, 13:02 Не мисля, че има връзка и не е ненормално - по-странното е защо init процеса е успял да изпише и изчете над 60ГБ. Не съм сигурен дали това с мрежовите системи не е съвсем отделен проблем. Може ли да пейстнеш какво има в /proc/interrupts ?
Титла: Re: Висок load при четене/писане на диска на 64 битова система Публикувано от: senser в Jul 08, 2010, 15:01 Може ли да пейстнеш какво има в /proc/interrupts ? Код: less /proc/interrupts изчетените и изписани байтове на инит процеса са за неизключвана машина 4-5 дена Титла: Re: Висок load при четене/писане на диска на 64 битова система Публикувано от: gat3way в Jul 08, 2010, 15:57 Ммм нищо ненормално. Дали случайно SiS нямат някъде на сайта си линукски драйвер за IDE контролера си? Може пък с него да се държи по-добре...
Титла: Re: Висок load при четене/писане на диска на 64 битова система Публикувано от: senser в Jul 08, 2010, 16:21 Ммм нищо ненормално. Дали случайно SiS нямат някъде на сайта си линукски драйвер за IDE контролера си? Може пък с него да се държи по-добре... Честно казано не съм проверявал. Единствено за видеото съм търсил драйвер, но определено SiS са един от най-лошите варианти за ползване с Линукс......., но както и да е Ако проблемът беше с драйвера на ИДЕ-то, нямаше ли да има и кофти производителност с hdparm и dd. От друга страна, ако scheduler-a е причината, доста народ трябваше да е изревал досега. Аз в момента съм със sio, като че ли най-добре се държи. Направих и един тест със sysbench, ако някой иска да постне резултати да сравним: Код: sysbench --test=fileio --file-total-size=1500MB --file-test-mode=rndrw run Това е с процесор AMD65 Turion 800/1600 MHz 512 cache; 1GB RAM Титла: Re: Висок load при четене/писане на диска на 64 битова система Публикувано от: Naka в Jul 08, 2010, 16:59 Ако проблемът беше с драйвера на ИДЕ-то, нямаше ли да има и кофти производителност с hdparm и dd.Да точно така е. Досега не съм виждал диск който да има добра скорст с hdparm и dd, а пък реално да е зле под обикновен товар. От друга страна, ако scheduler-a е причината, доста народ трябваше да е изревал досега.И това е така. scheduler-a не би трябвало да има никава връзка с ide-драйвера и sis чипсета. Поне така си мисля. Имаше и един тест Bonnie++ Пусни го за 1GB. А някави подозрителни съобщения в dmesg имаш ли? Виж и smartctl --all /dev/sd... Титла: Re: Висок load при четене/писане на диска на 64 битова система Публикувано от: senser в Jul 08, 2010, 17:42 Имаше и един тест Bonnie++ Пусни го за 1GB. Не го знаех този тест, сега ще го пусна. В dmesg не съм заблелязал нищо подозрително: Код: dmesg |egrep -i "ide|disk|sda" Титла: Re: Висок load при четене/писане на диска на 64 битова система Публикувано от: gat3way в Jul 08, 2010, 18:04 Цитат Ако проблемът беше с драйвера на ИДЕ-то, нямаше ли да има и кофти производителност с hdparm и dd. От друга страна, ако scheduler-a е причината, доста народ трябваше да е изревал досега. Аз в момента съм със sio, като че ли най-добре се държи. Трудно е да се каже - първо, наистина има кофти производителност с hdparm, това идва от бавния udma режим. Имам един стар 80-гигабайтов Maxtor IDE диск, при него правя около 58 мб/с. Но при копиране на големи файлове, никога не съм виждал скорости по-високи от няколко мегабайта в секунда. I/O scheduler има доста голяма връзка с IDE драйвера. На практика, в общият случай, I/O scheduler-a работи едно ниво над дисковия драйвер - ако му се връщат грешни статус кодове или драйверът проявява странности при обслужването на разни заявки, нормалното функциониране на elevator-а пряко зависи от тези неща. Титла: Re: Висок load при четене/писане на диска на 64 битова система Публикувано от: senser в Jul 08, 2010, 19:57 Това е резултата от bonnie++: http://senser.no-ip.info/bonnie.html ($2)
А това тук е от piozone: Код: piozone /dev/sda Според мен всичко изглежда нормално, а на всичкото отгоре и лоада е в нормални граници. Подозирам, че се на дължи на факта, че днес имаше 2-3 токови удара, заради които се наложи да рестартирам РС. По принцип нямам навик да я спирам и си седи пуснат нон стоп, което ме навежда на мисълта, че лоада най-вероятно се качва с течение на времето, т.е. с увеличения на uptime. Предполагам, че сутринта като стана, ако няма други токови удари, ще е доста по бавна машинката, но да видим Титла: Re: Висок load при четене/писане на диска на 64 битова система Публикувано от: Naka в Jul 09, 2010, 00:42 Цитат Това е резултата от bonnie++: http://senser.no-ip.info/bonnie.html Изключително малки резултати получаваш за Sequential Output/Per Char = 0.225 Mb/sec и за Sequential Input/Per Char = 1.141 MB/sec Според мен изобщо не е нормално. Докато тестваше с bonnie да не си правил нещо друго с компютъра? докато за Sequential Output и Sequential Input Блоков трансфер резултатите ти са просто идеални. Това е при мене, ограничих си трансфера на Харда до UDMA2 /33 (Hdparm така ми дава 27 Mb/sec), Но забележи Sequential Output/Per Char = 11.740MB/sec и Sequential Input/Per Char = 23.785 MB /sec Вярно че е съвсем различно - десктоп (Intel chipset) но резлутати <=1MB/sec избощно не са нормални. Код: Version 1.03e ------Sequential Output------ --Sequential Input- --Random- Тези двете трябва да съответстват дискови операции с getc() и putc(). Който е програмирал с тези функии да поясни какво точно би означавали резултатите. Титла: Re: Висок load при четене/писане на диска на 64 битова система Публикувано от: senser в Jul 09, 2010, 07:14 Изключително малки резултати получаваш за Sequential Output/Per Char = 0.225 Mb/sec и за Sequential Input/Per Char = 1.141 MB/sec Не помня да съм правил нещо по-сериозно, но ще пусна теста още веднъж като спра повечето процеси и ще дам резултата Титла: Re: Висок load при четене/писане на диска на 64 битова система Публикувано от: senser в Jul 09, 2010, 10:48 Вторият резултат от bonnie++ е още по-зле: http://senser.no-ip.info/bonnie2.html ($2)
По време на теста умишлено оставих тези процеси, които са почти винаги пуснати на лаптопа, но без да правя нищо на него, т.е. повечето време са били idle Титла: Re: Висок load при четене/писане на диска на 64 битова система Публикувано от: gat3way в Jul 09, 2010, 11:32 Я виж каква е стойността в /proc/sys/vm/laptop_mode, ако е нещо различно от 0, дай echo 0 >/proc/sys/vm/laptop_mode и пусни теста наново.
Титла: Re: Висок load при четене/писане на диска на 64 битова система Публикувано от: senser в Jul 09, 2010, 15:37 Я виж каква е стойността в /proc/sys/vm/laptop_mode, ако е нещо различно от 0, дай echo 0 >/proc/sys/vm/laptop_mode и пусни теста наново. Код: less /proc/sys/vm/laptop_mode |