LINUX.ORG.RU

История изменений

Исправление arkhnchul, (текущая версия) :

Достаточно посмотреть сколько кода в драйвере sata в линуксовом ядре выполняется на каждый запрос.

не особо-то и много на самом деле, если брать во внимание количество данных, получаемых после запроса.

Если бы накопитель был отображен в адресное пространство проца - все это было бы не нужно.

(очень) утрированное описание того, что происходит сейчас:

  • процессу нужны данные с устройства из файла foo.bar

  • ядро смотрит куда чево каво, видит, что запрошенный кусок лежит в блоках с 0x8AF45BC4 по 0x8AF4F7DD

  • ядро пинает контроллер «дай мне блоки с 0x8AF45000 по 0x8AF50000»

  • контроллер по DMA перекладывает данные из откуда там они у него лежат в RAM, ядро и процессор в это время заняты другими делами, DMA (почти) аппаратный

  • в MMU взлетает флаг, что данные залились из медленной памяти в быструю и что с ними можно чото делать

  • ядро может переключить процесс на работу с запрошенным куском

ты предлагаешь такое, опять же - сильно утрировано и упрощенно:

  • процессу нужно сложить два инта по адресам 0x8AF45BC4 и 0x8AF4F7DD

  • процесс пинает процессор MOV [0x8AF45BC4], EAX

  • мееееедленно и печально 0x8AF45BC4 ползет из флеша в пока еще холодный кэш, процессор ждет, ибо никаких устаревших костылей для информирования процессора о том, что простая атомарная операция будет выполняться еще хз сколько тысяч тактов, не предусмотрено

  • история повторяется с 0x8AF4F7DD

Исходная версия arkhnchul, :

Достаточно посмотреть сколько кода в драйвере sata в линуксовом ядре выполняется на каждый запрос.

не особо-то и много на самом деле, если брать во внимание количество данных, получаемых после запроса.

Если бы накопитель был отображен в адресное пространство проца - все это было бы не нужно.

(очень) утрированное описание того, что происходит сейчас:

  • процессу нужны данные с устройства из файла foo.bar

  • ядро смотрит куда чево каво, видит, что запрошенный кусок лежит в блоках с 0x8AF45BC4 по 0x8AF4F7DD

  • ядро пинает контроллер «дай мне блоки с 0x8AF45000 по 0x8AF4F000»

  • контроллер по DMA перекладывает данные из откуда там они у него лежат в RAM, ядро и процессор в это время заняты другими делами, DMA (почти) аппаратный

  • в MMU взлетает флаг, что данные залились из медленной памяти в быструю и что с ними можно чото делать

  • ядро может переключить процесс на работу с запрошенным куском

ты предлагаешь такое, опять же - сильно утрировано и упрощенно:

  • процессу нужно сложить два инта по адресам 0x8AF45BC4 и 0x8AF4F7DD

  • процесс пинает процессор MOV [0x8AF45BC4], EAX

  • мееееедленно и печально 0x8AF45BC4 ползет из флеша в пока еще холодный кэш, процессор ждет, ибо никаких устаревших костылей для информирования процессора о том, что простая атомарная операция будет выполняться еще хз сколько тысяч тактов, не предусмотрено

  • история повторяется с 0x8AF4F7DD