Супер скоростное копирование в DOS

Тема в разделе "WASM.ASSEMBLER", создана пользователем NoName, 10 ноя 2011.

  1. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    Дано. Dos. Нереальный режим.
    Нужно скопировать произвольный объем данных от 200 кб и до десятков мегабайт с максимальной скоростью. Я так понимаю что копирование по двойным словам не самый оптимальный вариант, есть ограничения по времени).
    Данные выровнены на границу 0x200 байт, их нужно читать из файла.
    Будет использоваться процессоры AMD LX800 и подобные. Насколько я знаю там есть MMX и 3DNow!. Какие есть варианты?
    Можно ли сделать параллельную загрузку нескольких файлов?
     
  2. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Имхо узким местом будет чтение с диска. Процессор его полюбому значительно обгонит даже если побайтно копировать будет. Так что для ускорения поможет только дефрагментация файлов. Любые попытки параллельного чтения файлов с одного диска приведут к значительному замедлению так как головки будут бестолково метаться между дорожками разных файлов. Думать в сторону параллельного чтения файлов можно только если они физически на разных дисках.
     
  3. h0t

    h0t Member

    Публикаций:
    0
    Регистрация:
    3 апр 2011
    Сообщения:
    735
    Можно попробывать использовать читать используя DMA.
     
  4. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    Насколько скорость будет больше с DMA?
     
  5. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    DMA позволяет освободить процессор во время чтения и использовать на что-то полезное, например на перенос ранее считанного буфера, т.е. распараллелить чтение с диска и копирование в памяти. В старых манулах пишут что за это придётся заплатить тем что DMA работает медленнее чем PIO чтение с диска, что с этим сейчас не в курсе - наверняка в современном железе это исправлено, но само считывание в любом случае быстрее не будет - оно же механикой определяется.
    Чтобы оценить возможный выигрыш просто измерь с помощью rdtsc время считывания буфера с диска и время его копирования dword-ами.
    Кстати если будешь в унреале читать кластеры непосредственно с контроллера то сможешь сразу кидать нужные данные куда нужно (или в несколько мест сразу) и никакого выигрыша DMA в этом случае не даст - всё и так "распараллелится". А если читать файл средствами DOS то процессор полюбому будет тупо ждать завершения операции чтения.

    Имхо самый большой ресурс для ускорения в этой задаче это минимизация перепозиционирования головок диска - т.е. читать дефрагментированные файлы как можно большими блоками, а если есть много мелких файлов то стараться объединить их в один большой дефрагментированный. Все остальные оптимизации дадут существенно меньший выигрышь при существенно больших трудозатратах на код.
     
  6. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    В качестве диска использоваться будет флеш диск.
     
  7. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Всё равно замерь время считывания буфера и его копирования - как раз из их сопоставления и увидишь теоретические пределы программной оптимизации ;) флешка тоже штука не шибко быстрая.
     
  8. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    NoName
    Возьми руководство по оптимизации под свой процессор или под другой и сделай так как там написано.
    Вот к примеру в одном из этих

    А вообще по ищи по словам "Быстрое копирование памяти" что-то в этом духе.
    Вот что попалось
    http://exelab.ru/f/index.php?action=vthread&forum=6&topic=15816&page=1


    Правда это не относится к копированию данных на жестком. На жёстких надо применять DMA.
    Пример есть на wasm.ru правда насколько там корректно не помню на всякий случай я бы еще на osdev.org там на английском всё более лучше описано. И код по лучше будет.

    Ну это вы раскопали.Да такое было лет 20 тому назад, пока не было PCI, а была ISA то самый быстрый DMA был немного медленнее чем самый быстрый PIO. А после того как появился PCI PIO остался на старой скорость а у DMA скорость увеличилось.И такие режимы стали называться UDMA
    Сейчас он более чем в 10 раз быстрее чем PIO.

    Примерные цифры для сравнения
    память-память порядка 4-5 ГБайт/с
    UDMA при работе с SSD 250-1000 МБайт/с
    UDMA при работе с HDD 60-100 МБайт/с
    при работе с usb HDD 30 МБайт/с
    при работе с usb flash 1-30 МБайт/с
    DMA cовместимый с ISA шиной с любого носителя 4 Мбайт/с
    PIO c любого носителя 4 Мбайт/с
     
  9. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Откуда вывод что оптимизация под процессор операции копирования ничего не даст - она и так на 2-3 порядка быстрее чтения с флешки, а значит любая её супероптимизация даст эффект менее 1% ;)

    Pavia
    Надеюсь я правильно понимаю, что установив практически любой драйвер для USB флешек под DOS автоматически получим тот самый UDMA и 1-30 МБайт/с ?
    Тогда на фоне этого пытаться сэкономить 1% времени на копировании память-память параллельно с чтением файла нет никакого смысла.
     
  10. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    Y_Mur
    для скорости, дешевизны, простоты установки (иде и не надо дров) можно использовать компакт флэшь (для забывающих русские буквы и ленящихся лишний раз нажать на кнопки в гугле: 紧凑型闪存, காம்பாக்ட் ஃபிளாஷ், కాంపాక్ట్ ఫ్లాష్,แฟลชขนาดเล็ก, કોમ્પેક્ટ ફ્લેશ, ಕಾಂಪ್ಯಾಕ್ಟ್ ಫ್ಲಾಶ್, ну и конечно же compact flash kaart)
    (у всех остальных кроме некоторых прошу прощения за выходку)

    вот какойто тест на скорости

    переходнички иде - кф стоят от пары $. есть даже на несколько карт, например
     
  11. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    qqwe
    Это предложение не мне, а ТС, если оно его конечно устроит ;) Утроение скорости чтения/записи по сравнению с флешкой конечно гуд, но далеко не всегда удобно каждый раз в IDE разьём лазить, к тому же в ноуте он может быть один и занят или не быть совсем ;)
    А на счёт простоты установки и не надо дров - вопрос на засыпку - ДОС опознав его как IDE станет автоматом использовать UDMA или всё таки по умолчанию в ДОС будет PIO? про который Pavia утверждает "...UDMA сейчас более чем в 10 раз быстрее чем PIO." Почему-то мне не очень верится в это утверждение, но проверять сейчас влом.

    ПС: А так твой пост подтверждает мою основную мысль здесь - для заметного ускорения нужно оптимизировать не копирование память-память, а операцию чтения с диска/флешки или другого носителя.
     
  12. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    Y_Mur
    не могу найти недавнее сравнение кф, винтов пата, сата, сд карточки. недавно видел.
    вобщем, там выходит, что по последовательному чтению кф не медленнее сата, по произвольному и записи быстрее не помню в сколько раз.

    еще + по сравнению с ссд - дешевле, можно купить в ларьках торгующих мелочовкой по фото-моб и прочей электроникой. те что на убийство можно взятть на барахолке.
    дык есть же переходники. любой переходник усб/сата -> пата подойдет.
    кроме того, разве злостно экспериментируя над любимым нотом не лучше ли временно заменить его винт на более экспериментальный? просто на всякий случай. (есть ноты со сменными устройствами. иногда до неск штук. их мучить удобнее. а если взять чуть постарше и попоцарапаннее, то и не так дорого. недавно один ам предлагал тинкпад а31 за толи $40, толи $60 изза пошкрябанности, а на нем между тем 3 слота под ультрабэи 2000 и полный набор портов даже без дока)
    есть кф с удма, есть кф без удма. ось его видит как винт, так что тут вопрос самой дос (встречный вопрос, а почему дос? смотрите какая ляля. и нетребовательная, и быстрая, и простая, и с устройствами работать просто сказка)

    ну дык. это даже не может быть вопросом. сперва диск, потом уже память, кэш, гпу
     
  13. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Насколько я понял из прошлых постов ТС он поддерживает и допиливает какую-то древнюю ДОС разработку переписать которую под свовременную ось неподьемный для него геморой, отсюда и
     
  14. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    Y_Mur
    не знаю что больший геморой - переписывание проги (или ксли охота похакерствовать - добавление в ось векторов 21 и 13 с переадресацией на функции оси + перехватчик обращений к портам (in, out) и тоже переадресация. ось то опенсорсная) 1 раз или гемор с досом каждый раз.
    кроме того, есть разные эмули и песочницы. например, эта либа (пример использования).

    кстати, насчет нотов и кф. ради интереса ткнул переходники с псимсиа на кф. вот что мне выдало. посортируйте под себя. цены от $2.5
     
  15. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    Что-то как-то все сложно получается.
    Работать будет чисто компакт флешка или на крайний случай усб. никаких переходников нельзя.
    Только DOS никаких приблут кроме самодельных.
    На деле компакт флеш работает раза в два быстрее юсб, но эту скорость хочется каким-то образом увеличить.
    Сейчас я копирую блоками через некий буфер, который ограничен ограничениями DOS.
    Пока так и не разобрался стоит ли использовать DMA.
     
  16. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    NoName
    переходник иде -> кф это 2 разъема разных размеров + согласование по напряжению. стоят копейки
    запросто. купите более быстрый кф. желательно, с поддержкой удма. ранг скорости флеши пишется на ней как х<число>. СД карточки счас максимум около х10, кф около х600. это из тех, что видел в ларьке полгода назад. счас, наверно, есть быстрее
    ага. вот, похоже и причина беды. ели вы еще скажете, что это рс на 2мгц, то тогда вам точно никакая флэшь не поможет. даже арм с эмулем легко обскачет.
     
  17. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    qqwe
    вообще-то уже сказал в самом первом посте:
    так что дело не в этом, а в том чтобы заставить ДОС полноценно поддерживать новое железо.

    NoName
    Просто запусти на этом компе современную ось хоть win, напрмер с live cd или флешь, хоть ещё чего и засеки время прочтения крупного файла со своей КФ и если окажется заметно быстрее чем у тебя, значит это ДОС тормозит и нужно разбираться с UDMA. А если не окажется то единственное что ты можешь сделать, это только искать более быструю карточку, программные оптитимизации практически ничего не дадут.
     
  18. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    В винде все летает.
     
  19. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    NoName А Вин98 не подойдет? Там вроде UDMA уже есть.
     
  20. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    А может аффтару темы на SSD разориться? Быстрее них только какие-то поделки, которые набиваются модулями DDR и эмулируют винт.