OSDev

для всех
Текущее время: 20 авг 2018, 11:34

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 55 ]  На страницу Пред.  1, 2, 3, 4, 5, 6  След.
Автор Сообщение
 Заголовок сообщения: Re: Адресация памяти (иная?)
СообщениеДобавлено: 26 ноя 2014, 10:32 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1089
dragon писал(а):
stlw, в доке написано что в режиме write-throught разрешён write-combining. Этого, чисто теоретически, должно быть достаточно для ускорения?

Нет такого. WC включается отдельно и другим сочетанием битов.
Том 3А стр 536 и
Том 3А стр 545

write-throught - термин из электроники. Означает что, при приходе фронта строба клокового сигнала - сохранение в регистре(защелке) осуществляется с одновременным выдачей пришедшего сигнала в линию.
В нашем случае для это означает что происходит сохранение результата в кэше и моментально этиже данные отправляются в шину. А далее Ядро (порт Store) на следующих тактах уже ждёт ответного сигнала от шины.


stlw
Цитата:
Есть разница между write combining и memory ordering. В случае с write through разрешено соединять writes вместе хоть они и не cache-able. но не разрешено менять порядок write операций. На практике это означает, что при переходе на новую строку кеша надо ждать пока придет global observation от предыдущей строки, то есть платим тот же простой, что и на UC, только не так часто.
На самом деле все еще хуже - из-за малого количества пользователей WT memory type, его поддрежка была удалена из процессора. На процессорах линейки Pentium 4 и полее поздних, включая Core, WT memory type ведет себя точно так же как и UC.

Снова чушь. По порядку.

Цитата:
Есть разница между write combining и memory ordering.
Это термины из разных категорий и сравнивать их не имеет смысла.
Цитата:
Есть разница между write combining и memory ordering. В случае с write through разрешено

Судя по всему опечатка вместо write through должно быть write combining. Так как фраза "В случае" подразумевает выбор из чего-то. А вот это "чего-то" и было в предыдущем предложение.
Как я выше писал WT выполняет запись в шину на каждую операцию Store.
А вот в WC как раз и ждёт окончания кэш линейки.

Для WT число записей равно числу в UC.
Для WC число записей меньше чем в UC.

Цитата:
На самом деле все еще хуже - из-за малого количества пользователей WT memory type, его поддрежка была удалена из процессора. На процессорах линейки Pentium 4 и полее поздних, включая Core, WT memory type ведет себя точно так же как и UC.

Снова чушь.
WC - работает быстрее UC. подтверждение
Да и сам проверял буквально месяц назад проверял, на новом компьютере. Включал и отключал ускорение при отрисовки есть.
WT - работает быстрее UC. Проверял 3 месяца назад. Да вы и сами можете проверить включив и отключив КЭШ в биосе. Разница в скорости заметна не вооруженным взглядом.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Адресация памяти (иная?)
СообщениеДобавлено: 26 ноя 2014, 12:43 

Зарегистрирован: 26 мар 2012, 17:32
Сообщения: 208
Ого, экспериментатор обвиняет в чуши работника Интел.
pavia писал(а):
write-through - термин из электроники
Не только.
Код:
$ dmesg | grep -i 'write through'
sd 5:0:0:0: [sdb] Assuming drive cache: write through
Это давно уже довольно общий термин про кеш, в общих чертах означающий что при записи сначала данные пишутся в кеш, а потом (быть может, асинхронно) отправляются на носитель (media).

pavia писал(а):
stlw писал(а):
Есть разница между write combining и memory ordering.

Это термины из разных категорий и сравнивать их не имеет смысла.
Кое-что общее есть. В зависимости от настроенного типа кеша, задаётся включённость WC и этот самый memory-order (по порядку, либо с возможностью переупорядочивания). Т.е. это две настройки, которые одновременно задаются выбором типа кеширования.
А когда говорилось "есть разница", видимо, подразумевалось что у кого-то одним или несколькими постами ранее эти понятия смешались, а совсем не то что якобы эти понятия имеют много общего.

pavia писал(а):
WT - работает быстрее UC. Проверял 3 месяца назад. Да вы и сами можете проверить включив и отключив КЭШ в биосе.
На каком именно процессоре проверял? Это ж важное уточнение. Ну и методику проверки стоит как-то упомянуть.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Адресация памяти (иная?)
СообщениеДобавлено: 26 ноя 2014, 19:13 

Зарегистрирован: 10 окт 2013, 14:54
Сообщения: 80
Вы меня даже заинтересовали ;)
Зачем тогда биосы ставят WT в fixed MTRRs? Осталось с "незапамятных времён"?
На гигабайте видел прямо на F0000..FFFFF, на асусе - E0000-E8000.
Опять же - сравнил fps, это недолго ;)

800x600x16 бит, простой screen clear, Core Duo E7500 (775 сокет), ATI 4850:
UC 68,9
WT 50,6
WC ~2545

WT ставил тупо на весь диапазон видеопамяти - так же, как WC.
Начиная с 1156 сокета UC сильно проседает, вот там, наверно, что-то и поменяли. И UC==WT.

Код:
           1156+ATI    1155+встроенная
      UC   16            37 
      WT   16            37
      WC   2230          5426


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Адресация памяти (иная?)
СообщениеДобавлено: 26 ноя 2014, 23:20 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1089
Цитата:
Зачем тогда биосы ставят WT в fixed MTRRs? Осталось с "незапамятных времён"?

WT - является кэшируемой памятью.
Том 3А стр. 523

Цитата:
На гигабайте видел прямо на F0000..FFFFF, на асусе - E0000-E8000.

WT - ставится для ускорения чтения. Циклы будут выполняться быстрее.
Собственно поэтому ваш тест с очисткой и не показывает преимуществ WT перед UC. Так как в нем не идет чтение.
WT - можно ставить на всё кроме MMIO.
В данном случае MMIO надо читать строго как порты.
MMIO - это порты отображенные в память. И они не должны быть закэшированны иначе будет ерунда в логике работы программ.
А вот для памяти: память БИОСа, видео память или системная память - не важно закешированна она или нет. При этом логика программ не по рушится. А вот ускорение важно.


Тем более как правило в D0000-FFFFF это не память БИОСа, а системная память в которую БИОС скопировал/разархивировал свой код и в которой он создал(сгенерировал) таблицы PCIRQ, ACPI, DMI.
А после этих действий включается защита от записи.
А вот ввиду того что FLASH биоса находится на LPC, то скорость обращения к FLASH будет составлять не более 16МБит/с что 10-100 раз медленее работы системной памяти. Поэтому БИОС и кэширует свой код.

Есть ещё тонкости с режимом SMI, который запрещают кэшировать область A0000-BFFFF.
Так как в данном случае смена этой памяти может происходить случайно, также как и с портами.
Подробнее читать про SMI и теневую память. И о том как он там прячется.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Адресация памяти (иная?)
СообщениеДобавлено: 27 ноя 2014, 00:46 

Зарегистрирован: 10 окт 2013, 14:54
Сообщения: 80
pavia писал(а):
WT - ставится для ускорения чтения. Циклы будут выполняться быстрее.
Собственно поэтому ваш тест с очисткой и не показывает преимуществ WT перед UC. Так как в нем не идет чтение.
Запись я и тестировал, чтобы проверить точно ли WT==UC в этом случае.
На моделях 775 сокета разница есть....


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Адресация памяти (иная?)
СообщениеДобавлено: 27 ноя 2014, 23:01 

Зарегистрирован: 04 ноя 2007, 14:48
Сообщения: 113
По поводу доки вот пруф:

Vol. 3A11-7

Цитата:
Write-through (WT) — Writes and reads to and from system memory are cached. Reads come from cache
lines on cache hits; read misses cause cache fills. Speculative reads are allowed. All writes are written to a
cache line (when possible) and through to system memory. When writing through to memory, invalid cache
lines are never filled, and valid cache lines are either filled or invalidated. Write combining is allowed. This type
of cache-control is appropriate for frame buffers or when there are devices on the system bus that access
system memory, but do not perform snooping of memory accesses. It enforces coherency between caches in
the processors and system memory.


Практический опыт исчерпывающий, спасибо, dixie!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Адресация памяти (иная?)
СообщениеДобавлено: 27 ноя 2014, 23:10 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1065
Откуда: Балаково
dixie писал(а):
Вы меня даже заинтересовали ;)
Зачем тогда биосы ставят WT в fixed MTRRs? Осталось с "незапамятных времён"?
На гигабайте видел прямо на F0000..FFFFF, на асусе - E0000-E8000.
Опять же - сравнил fps, это недолго ;)

800x600x16 бит, простой screen clear, Core Duo E7500 (775 сокет), ATI 4850:
UC 68,9
WT 50,6
WC ~2545

Мне стало интересно протестировать свою видеокарту. Если можно, выложи программу для запуска с кэшированием UC, WT и WC. Число 2545 мне кажется не совсем реальным - попробуй между кадрами менять цвет чёрный на белый, может это как-то повлияет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Адресация памяти (иная?)
СообщениеДобавлено: 28 ноя 2014, 01:08 

Зарегистрирован: 10 окт 2013, 14:54
Сообщения: 80
Да не, цифры вполне реальные - это же 800x600. А запуск у меня с толкача, увы :)
Нужная версия, в других нету тестовой программы.

Ставится на флешку или любой FAT/FAT32 раздел, грузится своим бутсектором.
Потом из меню (Current settings) выбирается режим 80x30 - это виртуальная консоль в VESA 800x600 (по умолчанию - 8 бит).

Потом в шелле (по F3) - "example fps".
Код тестирования предельно простой:

Код:
   u32t start = tm_counter(),
          cnt = 0;
   do {
      vio_clearscr();
      cnt++;
   } while (tm_counter()-start < 182);
   printf("%d.%d frames per second\n", cnt/10,cnt%10);

Т.е. просто очистка экрана виртуальной консоли (на самом деле она каждый раз чистит нулями не только физический экран, но и shadow буфер графического режима, но на том WB, поэтому игнорируем ;))
Ждём ~10 секунд по таймеру (18.2*10) и считаем результат.

По умолчанию - UC, после биоса.
Команда vmtrr - поставит WC на видеопамять (найдёт видеокарту на PCI и поставит WC на весь диапазон памяти, включащий адрес LFB, отдаваемый VESA).

Потом делаем MTRR VIEW и командой MTRR SET меняем регистр с видеопамятью на WT. У меня почти везде оно на E0000000, 256 метров, выглядит так:
Код:
   mtrr set ? 0xE0000000 0x10000000 wt

где ? номер регистра из VIEW (там видно будет строчку с WC).

Если что - mtrr /? в помощь. Этой командой можно с mtrr сделать всё, что вообще возможно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Адресация памяти (иная?)
СообщениеДобавлено: 28 ноя 2014, 02:20 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1065
Откуда: Балаково
Заставить бы ещё этот загрузчик загружаться. ЧЯДНТ?
В Windows 7 распаковал архив на E:\Загрузки\QS_LDR_308
Скопировал содержимое директории на флешку, выполнил instboot.cmd h:
E:\Загрузки\QS_LDR_308\tool>instboot.cmd h:
Type YES here to write boot sector: yes
Bootsector written.
Скопировано файлов: 1.
Скопировано файлов: 1.

При загрузке компьютера загружается загрузчик GRUB, который был на флешке до этого.
Это при обычной загрузке с флешки. При загрузке с UEFI вообще ни чего не загружается, переходит на загрузку с основного винчестера.
Похоже что бут-сектор остаётся неизменным. Ты уверен, что бут-сектор пишется именно на физический диск флешки? У меня она является третьим физическим устройством, и я сомневаюсь, что утилита правильно его определяет по логическому имени. Тем не менее, загрузочный жёсткий диск не пострадал.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Адресация памяти (иная?)
СообщениеДобавлено: 28 ноя 2014, 07:42 

Зарегистрирован: 04 ноя 2007, 14:48
Сообщения: 113
Предположу, что флешка с таблицей разделов, нужно взять флешку без MBR.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 55 ]  На страницу Пред.  1, 2, 3, 4, 5, 6  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB