Здравейте,
Проблемът предполагам е познат за част от вас, но все пак ще поясня:
Системата е 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
PID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
19116 be/4 senser 3.90 K/s 0.00 B/s 0.00 % 0.91 % python2.6 /usr/bin/iotop -Po -d 4
7520 be/4 senser 997.33 B/s 0.00 B/s 0.00 % 0.03 % firefox --sm-config-prefix /fire~012899100000311450025 --screen 0
9395 be/4 mysql 4.87 K/s 0.00 B/s 0.04 % 0.00 % mysqld --defaults-file=/etc/mysq~cket=/var/run/mysqld/mysqld.sock
Проблемът не е във файловата система - почти няма разлика при различните. Хардът също е ОК и производителността му измерена с hdparm е нормална:
hdparm -tT /dev/sda
/dev/sda:
Timing cached reads: 950 MB in 2.00 seconds = 474.45 MB/sec
Timing buffered disk reads: 88 MB in 3.03 seconds = 29.03 MB/sec
Проблемът се дискутираше във форума на gentoo, но нещо замря:
http://forums.gentoo.org/viewtopic-t-482731-postdays-0-postorder-asc-start-925.html. Там имаше различни предположения, но повечето витаеха около това, че 64 битовите системи са засегнати значително повече от 32 битовите и, че е "замесен" disk scheduler-a. Пробвал съм и с трите различнi scheduler-a и няма промяна, поне не и осезаема.
Ползвам компютъра за ежедневна работа, и предполагам, че го натоварвам малко повече от средностатистически потребител, защото освен браузър, офис, музика и т.н. имам пуснати апач и mysql, но въпреки това не мисля, че е нормално натоварването на системата да е постоянно около 1-ца, а програмите да се стартират понякога за минути.
Това, което ми направи впечатление вчера е io статистиката на произволен процес, която изглежда така:
# less /proc/1/io
rchar: 157786078883
wchar: 65325745653
syscr: 906017819
syscw: 168525258
read_bytes: 47304096768
write_bytes: 17572843520
cancelled_write_bytes: 2679222272
и по-точно последния брояч cancelled_write_bytes. За него намерих следното тук
http://www.kernel.org/doc/Documentation/filesystems/proc.txt:
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
1024+0 records in
1024+0 records out
536870912 bytes (537 MB) copied, 29.1484 s, 18.4 MB/s
Относително бързо писане, но през това време компютъра е неизползваем - дори и мишката трудно се движи, а лоуда е към 10.
Прави ми впечатление, че май когато един процес прави дисковата операция (четене или писане) скоростта е добра, но когато няколко конкурентни процеса се борят за достъп, скорстта пада драстично ..... ако може да се вярва на iotop де.