Board.KolibriOS.org

Official KolibriOS board
It is currently Sun Dec 08, 2019 6:18 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 147 posts ]  Go to page Previous 13 4 5 6 710 Next
Author Message
PostPosted: Thu Jun 11, 2015 4:52 pm 
Offline
Kernel Developer
User avatar

Joined: Thu Sep 03, 2009 1:52 pm
Posts: 1621
О, 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 wrote:
Только с PIO так и не понял, если прерывание сбрасывается чтением из порта, то зачем что-то делать в обработчике?
KolibriOS - многозадачная система, и железо может закончить работу во время исполнения другой задачи, которая, конечно, постоянно из порта ничего не читает. Впрочем, при реализованном DMA можно сказать, что так и было, код настройки IDE просто не включает прерывания IDE, если хотя бы один из master/slave не поддерживает DMA.

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


Top
   
PostPosted: Fri Jun 12, 2015 6:51 pm 
Offline
Mentor/Kernel Developer
User avatar

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


Top
   
PostPosted: Sat Jun 13, 2015 4:36 pm 
Offline
Mentor/Kernel Developer
User avatar

Joined: Thu Mar 26, 2015 5:16 pm
Posts: 1264
Ну и если, внезапно, кто-то захочет по-тестировать, вся запись работает быстро благодаря кэшу, чтение пока только ntfs.


Top
   
PostPosted: Tue Jun 16, 2015 4:28 pm 
Offline
Kernel Developer
User avatar

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

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


Top
   
PostPosted: Tue Jun 16, 2015 10:33 pm 
Offline
Mentor/Kernel Developer
User avatar

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


Top
   
PostPosted: Wed Jun 17, 2015 12:00 am 
Offline
Kernel Developer
User avatar

Joined: Thu Sep 03, 2009 1:52 pm
Posts: 1621
Pathoswithin wrote:
Почему PIO работает медленно и зависает вместе с кэшем - не понятно до сих пор.
Я не измеряла скорость, но у меня-то оно не зависает - и под Bochs, и на реальной машине. Другие тоже не жаловались, хотя наверняка просто никто больше не тестировал. Поэтому я и уточняла, выключаешь ли ты настройку прерываний в init_ata.inc при замерах PIO или просто форсируешь вызовы PIO-вариантов в hd_drv.inc. Как бы то ни было, я не могу отладить проблему, которая у меня не проявляется, без содействия кого-то, у кого она проявляется. Если у тебя есть интерес - можно продолжить.

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

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


Top
   
PostPosted: Wed Jun 17, 2015 12:48 am 
Offline
Just Flooding
User avatar

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


Top
   
PostPosted: Wed Jun 17, 2015 3:09 am 
Offline
Mentor/Kernel Developer
User avatar

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


Top
   
PostPosted: Wed Jun 17, 2015 3:14 am 
Offline
Just Flooding
User avatar

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


Top
   
PostPosted: Wed Jun 17, 2015 3:42 am 
Offline
Mentor/Kernel Developer
User avatar

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


Top
   
PostPosted: Wed Jun 17, 2015 3:58 am 
Offline
Just Flooding
User avatar

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


Top
   
PostPosted: Wed Jun 17, 2015 6:55 am 
Offline
Mentor/Kernel Developer
User avatar

Joined: Thu Mar 26, 2015 5:16 pm
Posts: 1264
Этот драйвер должен быть совсем кошерным.
kiv, если на том ядре fat всё-таки будет работать медленно, можешь проверить ещё и это ядро.


Top
   
PostPosted: Wed Jun 17, 2015 11:13 am 
Offline
Mentor/Kernel Developer
User avatar

Joined: Fri Jun 30, 2006 9:01 am
Posts: 1248
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


Top
   
PostPosted: Wed Jun 17, 2015 1:01 pm 
Offline
Just Flooding
User avatar

Joined: Thu Dec 11, 2014 1:31 am
Posts: 173
ок, у нас сейчас интернета нет, что-то чинят на линии...


Top
   
PostPosted: Wed Jun 17, 2015 3:57 pm 
Offline
Kernel Developer
User avatar

Joined: Thu Sep 03, 2009 1:52 pm
Posts: 1621
Линух разбивает настройку DMA на два шага, ide_dma_setup перед подачей команды и ide_dma_start после подачи команды, единственное действие последней - включить младший бит.

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

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


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 147 posts ]  Go to page Previous 13 4 5 6 710 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Limited