реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Гранулярность выделенных PCI ресурсрв MMIO, в чем собственно ограничения на выделение без потеряных "окон"
Bios71
сообщение Apr 11 2014, 06:34
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 78
Регистрация: 21-02-08
Из: Мюнхен
Пользователь №: 35 249



проблемма в чем , есть тазик устройств некоторые(10-20шт) "резервируют" по 64Мб
но самая злая видеокарта 128Мб и потому у нее объявляется гранулярность 0x7FF FFFF

вот в процессе выделения ресурсов видео карте мы даем ей диапазон (с оглядкой на гранулярность 0x7FF FFFF)
0х7800 0000 - 0x8000 0000
или
0х8000 0000 - 0x8800 0000
0х8800 0000 - 0x9000 0000
0х9000 0000 - 0x9800 0000
0х9800 0000 - 0xА000 0000

да, но принципиальная гранулярность то 1 Мбайт !!
почему бы не дать
0х7810 0000 - 0x8010 0000
или
0х8020 0000 - 0x8820 0000
0х8830 0000 - 0x9030 0000
0х90А0 0000 - 0x98А0 0000
0х98F0 0000 - 0xА0F0 0000

есть ли ограничения "принципиального" характера в спецификации PCI, P2P мостов (или при написании драйверов/OpROM и пр.)
или это от "ленивости" писателей биоса biggrin.gif crying.gif

на Win7/32 4G RAM, из них выделяем 2G на PCI MMIO и остается менее 2G на ось с приложениями
мы теряем в дырах выделенной памяти до 200Мб (где 112Мб, где по 30Мб/12Мб и т.д)
виндоза начинает свопить и производительность падает ниже плинтуса
PS:на Win7/64 все нормально там 16Gb RAM


Эскизы прикрепленных изображений
 Р В Р’ Р’ Р’ Р’ Р’ Р в‚¬Р В РЎВ˜Р В Р’µР Р…ьшено Р Т‘Р С• 78%
Прикрепленное изображение
765 x 1734 (246.9 килобайт)
 


--------------------
я не волшебник, я только учусь ...
Go to the top of the page
 
+Quote Post
gerber
сообщение Apr 22 2014, 13:25
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 750
Регистрация: 1-11-11
Пользователь №: 68 088



Цитата(Bios71 @ Apr 11 2014, 10:34) *
почему бы не дать
0х7810 0000 - 0x8010 0000
или
0х8020 0000 - 0x8820 0000
0х8830 0000 - 0x9030 0000
0х90А0 0000 - 0x98А0 0000
0х98F0 0000 - 0xА0F0 0000

есть ли ограничения "принципиального" характера в спецификации PCI, P2P мостов (или при написании драйверов/OpROM и пр.)
или это от "ленивости" писателей биоса biggrin.gif crying.gif

В спецификации PCI указано, что PCI устройство сигнализирует о востребовании себе величины адресного пространства путём "зануления" ("hardwiring to 0") неиспользуемых бит в регистре базового адреса. БИОС (или ОС) в процессе энумерации записывает в базовый адрес 0xFFFFFFFF и затем считывает обратно какое-то число. К примеру, если считано 0xF8000000, то устройство требует себе 128 Мбайт. Если система выделит физический адрес не 0x78000000, а 0x78100000 - то его просто нельзя будет записать в регистр базового адреса, так как младшие 27 бит аппаратно занулены и не хранятся в регистре устройства. Всё равно будет записано 0x78000000.
Это сделано для упрощения декодирования адреса при обращении к устройству по шине PCI. При такой схеме работы достаточно сравнить на равенство старшую часть адреса, чтобы определить, что устройство адресовано. В этом случае младшая часть является смещением (offset) внутри пространства регистров устройства. Это решается просто наложением логической маски по AND.
Если позволить записывать произвольный адрес (как Вы предлагаете), то для определения адресации внутри устройства нужно будет производить вычитание адресов в каждом цикле, и хранить целиком все 32 бита базового адреса, что довольно накладно с точки зрения реализации аппаратной логики PCI устройства.


--------------------
"... часами я мог наблюдать, как люди работают." (М. Горький)
Go to the top of the page
 
+Quote Post
Bios71
сообщение Apr 28 2014, 05:54
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 78
Регистрация: 21-02-08
Из: Мюнхен
Пользователь №: 35 249



Цитата(gerber @ Apr 22 2014, 16:25) *
Если система выделит физический адрес не 0x78000000, а 0x78100000 - то его просто нельзя будет записать в регистр базового адреса, так как младшие 27 бит аппаратно занулены и не хранятся в регистре устройства. Всё равно будет записано 0x78000000.


спасибо за развернутый ответ,

собственно, я нашел ответ "методом научного тыка"(С) сам, но не мог найти "каноничного" обьяснения увиденному,
пишем 0x78100000, читаем обратно 0x78000000 т.е. не просто гранулярность, а и игнорирование "битов составляющих ту самую гранулярность"

вопрос исчерпан, данке

PS: PCI Express System Architecture
Chapter 22: PCI Compatible Configuration Registers
page 799
The binary-weighted value of the least-significant bit set to one in the Base Address field indicates the required amount of space. This is also the first read/writable bit in the register and all of the bits above it are by definition read/writable.


Сообщение отредактировал Bios71 - Apr 28 2014, 06:29


--------------------
я не волшебник, я только учусь ...
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th June 2025 - 18:54
Рейтинг@Mail.ru


Страница сгенерированна за 0.01384 секунд с 7
ELECTRONIX ©2004-2016