Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Пн июн 18, 2018 12:57 pm

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 147 сообщений ]  На страницу Пред. 13 4 5 6 710 След.
Автор Сообщение
 Заголовок сообщения: Re: Скорость работы с IDE дисками
СообщениеДобавлено: Чт июн 11, 2015 4:52 pm 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Чт сен 03, 2009 1:52 pm
Сообщения: 1611
О, 48-битные номера секторов.
1. Создавать событие нужно до подачи команды. KolibriOS - многозадачная система, и при таком коде прерывание от таймера может переключиться на другую задачу после подачи команды, но до создания события, и если железо закончит работать до переключения назад, событие будет пропущено.
2. Хорошо бы проверить, что kernel_alloc вернула что-то ненулевое - памяти может и не оказаться. То же самое для create_event.
3. Метка DMA как название процедуры какая-то слишком неспецифичная, может совпасть с чем-нибудь, лучше переименовать.

Есть ещё некоторые некритичные вещи:
* вместо mov eax, 0 / sbb eax, 0 можно сделать sbb eax, eax
* ide_read и ide_write сильно похожи, можно их вообще сделать переходниками к общей функции - mov al, 0 / jmp ide_read_write в ide_read и mov al, 1 / jmp ide_read_write в ide_write. На allow_dma_access вообще можно забить, исторический артефакт.
* имена локальных переменных типа [hd_data] недоступны вне функций, но сами переменные продолжают существовать на время вызова вложенных функций - если объявить ide_hd_data equ hd_data, то во вложенных функциях можно вместо копирования туда-сюда использовать [ide_hd_data].

Pathoswithin писал(а):
Только с PIO так и не понял, если прерывание сбрасывается чтением из порта, то зачем что-то делать в обработчике?
KolibriOS - многозадачная система, и железо может закончить работу во время исполнения другой задачи, которая, конечно, постоянно из порта ничего не читает. Впрочем, при реализованном DMA можно сказать, что так и было, код настройки IDE просто не включает прерывания IDE, если хотя бы один из master/slave не поддерживает DMA.

_________________
Сделаем мир лучше!


Вернуться к началу
 Заголовок сообщения: Re: Скорость работы с IDE дисками
СообщениеДобавлено: Пт июн 12, 2015 6:51 pm 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1202
Ну теперь, наверно, православно, канонично и кошерно. В 2 раза меньше, чем было. Надеюсь, с Марио ничего плохого не случится, когда он это увидит.
Удалил буфер IDE_DMA, перенёс две переменные в bd_drv.inc .
2. Что-то слабо верится, что может не найтись ни одной страницы памяти. Да и что делать, если диску уже дана команда.
Подумал по поводу PIO... Ещё в начале, когда пытался заглушить прерывания, экспериментально установил несколько фактов (в моём случае): прерывания не выключаются, посылаются с интервалом, чтобы избежать высокой нагрузки на процессор, но непрерывно, без таймаута, до тех пор, пока не начнётся передача данных. Так что чтение порта в обработчике ничего не изменит, только начало передачи.
Думаю, это последняя версия от меня, по мелочам можешь сама подправить. Можно ещё объединить ide_read и ide_write, если сможешь сделать это изящно.


Вернуться к началу
 Заголовок сообщения: Re: Скорость работы с IDE дисками
СообщениеДобавлено: Сб июн 13, 2015 4:36 pm 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1202
Ну и если, внезапно, кто-то захочет по-тестировать, вся запись работает быстро благодаря кэшу, чтение пока только ntfs.


Вернуться к началу
 Заголовок сообщения: Re: Скорость работы с IDE дисками
СообщениеДобавлено: Вт июн 16, 2015 4:28 pm 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Чт сен 03, 2009 1:52 pm
Сообщения: 1611
Всё-таки настраивать DMA нужно строго до подачи команды диску, как в транке. Так, как у тебя, иногда не работает как минимум под Bochs - когда следующее чтение/запись начинается там же, где закончилось предыдущее, диск успевает сделать seek и сказать DMA-части о готовности перед тем, как DMA-часть поймёт, в какую часть памяти читать/писать, с ошибкой чтения/записи как результатом.

_________________
Сделаем мир лучше!


Вернуться к началу
 Заголовок сообщения: Re: Скорость работы с IDE дисками
СообщениеДобавлено: Вт июн 16, 2015 10:33 pm 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1202
Как у вас всё весело! Сначала драйвер тормозил файловые системы. Почему PIO работает медленно и зависает вместе с кэшем - не понятно до сих пор. А теперь начались чудеса: fat работает быстро на старых вызовах! Медленней, чем ntfs, но быстрей в windows xp! Структура fat не способствует блочным операциям, я провозился и сделал новый цикл, а ничего не изменилось - всё и так быстро! :lol: Bochs наверно не эмулирует реальные задержки, жёсткий диск так быстро не может - у меня всё работает прекрасно. Может как раз из-за такого подхода чтение по 16 секторов умудряется работать непрерывно?
В любом случае, я переделал чтение fat, начиная со строки 1820.


Вернуться к началу
 Заголовок сообщения: Re: Скорость работы с IDE дисками
СообщениеДобавлено: Ср июн 17, 2015 12:00 am 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Чт сен 03, 2009 1:52 pm
Сообщения: 1611
Pathoswithin писал(а):
Почему PIO работает медленно и зависает вместе с кэшем - не понятно до сих пор.
Я не измеряла скорость, но у меня-то оно не зависает - и под Bochs, и на реальной машине. Другие тоже не жаловались, хотя наверняка просто никто больше не тестировал. Поэтому я и уточняла, выключаешь ли ты настройку прерываний в init_ata.inc при замерах PIO или просто форсируешь вызовы PIO-вариантов в hd_drv.inc. Как бы то ни было, я не могу отладить проблему, которая у меня не проявляется, без содействия кого-то, у кого она проявляется. Если у тебя есть интерес - можно продолжить.

Pathoswithin писал(а):
Bochs наверно не эмулирует реальные задержки, жёсткий диск так быстро не может - у меня всё работает прекрасно.
При чтении - скорее всего, да. При записи - я не удивлюсь, если какие-то модели дисков начинают забирать данные от DMA себе в буфер немедленно, ещё до завершения seek, даже если конкретно твоя модель так не делает.
По опыту, другие эмуляторы часто даже не пытаются эмулировать задержки.

_________________
Сделаем мир лучше!


Вернуться к началу
 Заголовок сообщения: Re: Скорость работы с IDE дисками
СообщениеДобавлено: Ср июн 17, 2015 12:48 am 
Не в сети
Just Flooding
Аватара пользователя

Зарегистрирован: Чт дек 11, 2014 1:31 am
Сообщения: 173
 IXBT > Быстродействие FAT и NTFS > Поиск данных файла Вывод: NTFS имеет наиболее эффективную систему нахождения свободного места (из представленных). Стоит отметить, что действовать "в лоб" на FAT16 или FAT32 очень медленно, поэтому для нахождения свободного места в этих системах применяются различные методы оптимизации, в результате чего и там достигается приемлемая скорость. (Одно можно сказать наверняка - поиск свободного места при работе в DOS на FAT32 - катастрофический по скорости процесс, поскольку никакая оптимизация невозможна без поддержки хоть сколь серьезной операционной системы).


Вернуться к началу
 Заголовок сообщения: Re: Скорость работы с IDE дисками
СообщениеДобавлено: Ср июн 17, 2015 3:09 am 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1202
kiv, ты не понял, fat работает гораздо быстрее, чем ожидалось.
CleverMouse писал(а):
Другие тоже не жаловались, хотя наверняка просто никто больше не тестировал. Поэтому я и уточняла, выключаешь ли ты настройку прерываний в init_ata.inc при замерах PIO
О_о Не уточняла. И я не знаю, как это делать. Меня лично не особо интересует, но у hidnplayr возникали какие-то проблемы, может связано?
CleverMouse писал(а):
я не удивлюсь, если какие-то модели дисков начинают забирать данные от DMA себе в буфер немедленно
А Bus Master включить? Я думал, это начало передачи.


Вернуться к началу
 Заголовок сообщения: Re: Скорость работы с IDE дисками
СообщениеДобавлено: Ср июн 17, 2015 3:14 am 
Не в сети
Just Flooding
Аватара пользователя

Зарегистрирован: Чт дек 11, 2014 1:31 am
Сообщения: 173
1. FAT бывает разный, точнее
2. как проверял
3. готовлюсь к тестированию скорости завтра (уже, сегодня), если будут какие пожелания к тесту...
4. UDF ведь не поддерживается?


Вернуться к началу
 Заголовок сообщения: Re: Скорость работы с IDE дисками
СообщениеДобавлено: Ср июн 17, 2015 3:42 am 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1202
kiv
1. FAT32, естественно.
2. Копировал и засекал время — 100 Мб за несколько секунд.
3. Проверить нужно жёсткий диск, файловые системы ntfs, fat, можно ext и xfs. Если всё работает быстро, сравни с текущей сборкой. И осторожно с данными.


Вернуться к началу
 Заголовок сообщения: Re: Скорость работы с IDE дисками
СообщениеДобавлено: Ср июн 17, 2015 3:58 am 
Не в сети
Just Flooding
Аватара пользователя

Зарегистрирован: Чт дек 11, 2014 1:31 am
Сообщения: 173
1 + 2. простые операции с одним файлом в 100Мб, естественно будут быстрей. если еще использовать кластер в 16Кб и больше, так вообще в космос полетит...
3. да, я две версии заготовил: со старым kernel.mnt; и новым (он больше т.к. не пожат?)


Вернуться к началу
 Заголовок сообщения: Re: Скорость работы с IDE дисками
СообщениеДобавлено: Ср июн 17, 2015 6:55 am 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1202
Этот драйвер должен быть совсем кошерным.
kiv, если на том ядре fat всё-таки будет работать медленно, можешь проверить ещё и это ядро.


Вернуться к началу
 Заголовок сообщения: Re: Скорость работы с IDE дисками
СообщениеДобавлено: Ср июн 17, 2015 11:13 am 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Пт июн 30, 2006 9:01 am
Сообщения: 1235
Pathoswithin: I have been following this topic as close as I can. What is it you want me to test?
I assume you are talking about the HP omnibook 2100 which hangs with current kernel when accessing the harddisk.

_________________
"Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction." Albert Einstein


Вернуться к началу
 Заголовок сообщения: Re: Скорость работы с IDE дисками
СообщениеДобавлено: Ср июн 17, 2015 1:01 pm 
Не в сети
Just Flooding
Аватара пользователя

Зарегистрирован: Чт дек 11, 2014 1:31 am
Сообщения: 173
ок, у нас сейчас интернета нет, что-то чинят на линии...


Вернуться к началу
 Заголовок сообщения: Re: Скорость работы с IDE дисками
СообщениеДобавлено: Ср июн 17, 2015 3:57 pm 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Чт сен 03, 2009 1:52 pm
Сообщения: 1611
Линух разбивает настройку DMA на два шага, ide_dma_setup перед подачей команды и ide_dma_start после подачи команды, единственное действие последней - включить младший бит.

Теперь у меня работает, кроме одного древнего диска, не поддерживающего LBA48 и закономерно возвращающего HD read error. Поскольку больше никто не жаловался, я предлагаю коммитить. Выдать логин/пароль на запись svn или мне закоммитить?

_________________
Сделаем мир лучше!


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 147 сообщений ]  На страницу Пред. 13 4 5 6 710 След.

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB