На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Перед отправкой сообщения внимательно прочтите правила раздела!!!
1. Запрещается обсуждать написание вирусов, троянов и других вредоносных программ!
2. Помните, что у нас есть FAQ раздела Assembler и Полезные ссылки. Посмотрите, возможно, там уже имеется решение вашего вопроса.

3. Настоятельно рекомендуем обратить особое внимание на правила форума, которые нарушаются чаще всего:
  3.1. Заголовок темы должен кратко отражать её суть. Темы с заголовками типа "Срочно помогите!" или "Ассемблер" будут отправляться в Корзину для мусора.
  3.2. Исходники программ обязательно выделяйте тегами [code]...[/code] (одиночные инструкции можно не выделять).
  3.3. Нежелательно поднимать старые темы (не обновлявшиеся более года) без веской на то причины.

Не забывайте также про главные Правила форума!

Добро пожаловать и приятного вам общения!!! ;)
 
Модераторы: Jin X, Qraizer
Страницы: (51) « Первая ... 36 37 [38] 39 40 ...  50 51  ( Перейти к последнему сообщению )  
> Желающим USB под ДОС , Welcome!!!
    Цитата RUSSTARUS @
    Ну это наверное того стоит!

    Ну это твое дело. Плюсом, пожалуй, будет то, что эта контора, судя по всему, занимается разработкой целенаправленно и драйверы их скорее всего (но не факт) содержат мало ошибок. А вообще если уж на то пошло, то я думаю многие любители "поиграться с USB" поделятся с тобой наработками "за спасибо", но естественно придется многое допиливать.
    Сообщение отредактировано: shm -
      На форумах англоязычных хвалят книгу
      USB: The Universal Serial Bus by Benjamin David Lunt
      там примерыов много говорят, интересно на каком компиляторе
        StasNewOs, ты до сих пор не сделал поддержку EHC?
        По сабжу - мне вполне хватает спецификаций. Чужие исходники - чужие ошибки.
        Сообщение отредактировано: shm -
          Кстати вопрос к zakharo. Я когда начинал проектировать свой драйвер EHCI, то выбрал такую модель, что каждая цепочка TD объединяется в одну QH и добавляется в асинхронный список и так для всех транзакций (ну QH естественно освобождаются). Но вот по обдумав архитектуру совсем недавно пришел к выводу, что эффективней сразу добавить QH в асинхронный список под каждую используемую bulk и control конечную точку при инициализации устройства, так ли это? Вообже влияют ли на производительность QH в списке без активных TD?
          Сообщение отредактировано: shm -
            В книжке все 4 контроллера и примеры для мышей, клавы, принтера, вебкамеры и флешек. Такую книгу по любому надо купить.
            Я поддержку ещё не доделал, допереписываю систему и захожу уже на 3 круг драйвера флешек.
            Кстати shm читал тебя недавно на wasme, на эту тему, ты явно сделал level up в нней.
            По поводу скорости, то контроллер по своему таймеру проверяет команды в своей памяти, какие бы они небыли, хоть вопрос и не мне.
              У меня вообще QH один на все - я уже говорил, что был вынужден работать в условиях жестких ограничений на память. Адрес QH записывается в регистр контроллера при иницализации. При подготовке транзакции я заполняю QH, а потом выставляю контроллеру флажок ASYNC_ENABLE. После окончания транзакции снимаю ASYNC_ENABLE.
              На скорость это, пожалуй, влияет - я даже при работе с USB-винчестерами не получаю больше 3 Мб/сек, в то время, как Винда легко крутит до 40. Правда, Винда в одну транзакцию укладывает не один сектор, а сразу много (например, целый кластер) - это, конечно, тоже существенно влияет на скорость.
              Сообщение отредактировано: zakharo -
                А мне кажется, что винда читает 4096байт, т.е. страницу, 8 секторов за раз. Для заполнении виртуального пространства файлом ОС в любом случае сначала заполняет страницы, а уж потом ставит их подряд.
                Скорость будет максимальной, если все куски файла в одной очереди у контроллера, т.е. нужно взять нужное количество страниц и подготовить команды для копирования секторов в них за одну очередь. Мне кажется, что одну QH и несколько qt лучше, т.к. возможно обрабатывает её за один раз, хотя не знаю.

                При создании файла выделяется пространство под его объём, а уже при открытии его пространство заполняется страницами и сами страницы заполняются контроллером от флешки, или диска, или может сетевуха туда накидать чаго, или звуковуха записать звук, даже дополнительные процессоры (CPU, GPU), но главный процессор в это время не занят и делает другую работу.
                Сообщение отредактировано: StasNewOs -
                  Ну, во-первых, EHCI за одну транзакцию может передать 5 страниц - в QTD есть 5 адресов. Но надо учитывать еще и уровень SCSI.
                  Чем больше информации передается за одну SCSI-команду, тем выгоднее - меньше потери на передачу CBW и CSW. Дальше надо анализировать порядок кластеров в файле. Если они идут не подряд, то больше одного кластера читать нет смысла. А вот если подряд, то их тоже можно объединить и читать одной SCSI-командой.
                  Думаю, что c точки зрения скорости лучше всего сделать так: одной командой SCSI читать по максимуму, а дальше в зависимости от размера этого максимума сделать нужное количество QTD для приема.

                  Мне тут недавно довелось работать с карточкой памяти формата RAW, то есть без файловой системы. И не в ДОСе, а из специализированной ПЛИС. На карточке информация была записана просто по секторам в порядке возрастания. И там удалось поэкспериментировать со скоростью. Чем больше секторов я читал за одну SCSI-команду, тем, естественно, скорость была выше. Конечно, нелинейно - ведь процент потерь на передачу CBW и CSW становился все меньше. Короче, я дошел до 32 Кбайт (64 сектора) за одно чтение и получил скорость порядка 1 Мб/сек с карточки типа CF на самодельном (прошитом в ПЛИС) контроллере USB 1.1. А при чтении по одному сектору было примерно 200 Кб/сек.
                    Круто.
                    На диске обычно кластер собственно и есть 4096 байт, а страницы памяти, которые мы заполняем в реальности считаются перемешаны, хотя есть ещё 4мб страницы но с ними работать накладно для оперативки.
                    Если гнаться за скоростью, то получается можно отлавливать идущие подряд кластера и страницы, правда замучаешься такой алгоритм писать.
                    Проще учесть, что у нас есть перемешанные кластера на диске и перемешанные страницы памяти, которые нужно заполнять и ставить подряд в ВАП.
                    Короче работа сводиться к копированию файла блоками из 8 секторов по 512байт, для этого и делается цепочка из qtd.
                    Сообщение отредактировано: StasNewOs -
                      Цитата StasNewOs @
                      На диске обычно кластер собственно и есть 4096 байт

                      Смотря для какой системы. NTFS или там Ext - да, чаще всего 4096 кб. А FAT (FAT32) - обычно гораздо больше. На флешках стандартно используется FAT(32). Редко кто форматирует флешку в NTFS или Ext (2,3).
                        Бывает, что кластер 32 сектора, но он всегда кратен 8, получается, что его нужно разбивать на 4 части, т.к. страница памяти то 4096байт. Другое дело, что в нём файл тока на 3 сектора может быть.

                        Добавлено
                        А сама цепочка из qtd мне кажется должна быстро обрабатываться, он ведь не останавливается пока всю не обработает.

                        Добавлено
                        Для меня встала необходимость отлавливать моменты, когда у контроллера нету помощников и на материнке запаян хаб. Делать проверку количества юнитов.
                          Цитата StasNewOs @
                          В книжке все 4 контроллера и примеры для мышей, клавы, принтера, вебкамеры и флешек.

                          На все это есть нормальные спецификации. По крайней мере у меня проблем с реализаций роддержки HID и USB HDD не было.
                          Цитата StasNewOs @
                          Кстати shm читал тебя недавно на wasme, на эту тему, ты явно сделал level up в нней.

                          Я не написал там ничего нового, что не знал года 4 назад, когда писал драйвер UHCI и начал EHCI, вот недавно дошли руки его допиливать, но ничего особо нового я не узнал. Но разве, что про расщепленные транзакции я не читал.
                          Цитата StasNewOs @
                          По поводу скорости, то контроллер по своему таймеру проверяет команды в своей памяти

                          Это понятно, меня итересуют контретные значения. А сколько я потеряю в скорости если для каждой конечной точки будут постоянно висеть в списке свои QH. У меня складывается впечатление, что разработчики EHCI предполагали именно такую архитектуру. Сейчас у меня скороть работы с флешкой примерно такая же как в винде.
                          Цитата zakharo @
                          Винда в одну транзакцию укладывает не один сектор, а сразу много (например, целый кластер) - это, конечно, тоже существенно влияет на скорость.

                          Вообще ты меня не совем правильно понял - это понятно, что чем более большими кусками передаешь - тем быстрее скорость, меня интересует конкретно как влияют неактивные QH в асинхронном списке на производительность. А так я разбиваю передачу по 128 секторов для EHC, для UHC по 16. А на более верхнем уровне у меня тот же драйвер FAT производит "склейку" смежных клатеров при чтении.
                          Цитата StasNewOs @
                          А мне кажется, что винда читает 4096байт, т.е. страницу, 8 секторов за раз.

                          Нет, это не так.
                          Цитата StasNewOs @
                          Для заполнении виртуального пространства файлом ОС в любом случае сначала заполняет страницы, а уж потом ставит их подряд.

                          :wacko: Никто в здравом уме так делать не будет. У всех современных устройств с DMA есть возможность разбиения данных на страницы.
                          Цитата zakharo @
                          Ну, во-первых, EHCI за одну транзакцию может передать 5 страниц - в QTD есть 5 адресов.

                          Вот тут я не уверен, так как эти величина еще зависит от размера КТ.
                          Цитата zakharo @
                          Думаю, что c точки зрения скорости лучше всего сделать так: одной командой SCSI читать по максимуму, а дальше в зависимости от размера этого максимума сделать нужное количество QTD для приема.

                          Вообще примерно так оно и делается. Я правда ограничивая не DT а количесвом секторов на команду, но суть та же.
                          Цитата StasNewOs @
                          На диске обычно кластер собственно и есть 4096 байт

                          Предположение верно только для NTFS и то не всегда (у меня например сейчас на одном диске NTFS размер кластера иной).
                          Цитата StasNewOs @
                          Если гнаться за скоростью, то получается можно отлавливать идущие подряд кластера и страницы, правда замучаешься такой алгоритм писать.

                          В чем проблема?
                          Цитата StasNewOs @
                          но он всегда кратен 8

                          Не всегда, может быть меньше. Вообще рекомендую забыть про связь меду аппаратным уровнем и программной абстракцией данных.
                          Сообщение отредактировано: shm -
                            >У всех современных устройтвв с DMA есть возможность разбиения данных ан страницы.

                            Я и говорю, что подготавливаем qtd с тем, чтобы попасть в страницы.

                            В принципи поставить проверку на то, что следующий кластер идёт следом, или страницы физически друг за другом это не так и трудно.
                            Сообщение отредактировано: StasNewOs -
                              Цитата StasNewOs @
                              страницы физически друг за другом

                              А это еще зачем? раскидать данные по страницам - забота контроллера. Скорость от этого падать не должна.
                              Сообщение отредактировано: shm -
                                Это как? Контроллер не знает виртуальную память, он работает с реальной, ты чего :o .
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (51) « Первая ... 36 37 [38] 39 40 ...  50 51


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0758 ]   [ 15 queries used ]   [ Generated: 20.07.25, 14:15 GMT ]