Да, вы правы, на нулевом приоритете крутится поток MmZeroPageThread, который билдид список MmZeroedPageListHead.
Но никак не гигабайтами, и только во время абсолютного простоя, ибо ниже приоритета 0 нету ничего :)
Так что это слабо опровергает мои слова о том, что необходимо заострять внимание на этом аспекте.
Например, в вышеупомянутой винде код очистки крайне прост.
Дефолтный код: .text:00430364 __fastcall KiZeroPages(x, x) proc near ; CODE XREF: MiZeroWorkerPages(x,x)+10Dp
.text:00430364 ; KiXMMIZeroPages(x,x)+B5j ...
.text:00430364 push edi
.text:00430365 xor eax, eax
.text:00430367 mov edi, ecx
.text:00430369 mov ecx, edx
.text:0043036B shr ecx, 2
.text:0043036E rep stosd
.text:00430370 pop edi
.text:00430371 retn
.text:00430371 __fastcall KiZeroPages(x, x) endp
никогда этим не интересовался, но неужели эти 400к сэмплов нужны одновременно?
простой подсчет показывает что только под эти буферы нужно будет 200-300 метров памяти, неужели микшер столько кушает?
вы не совсем правы :)
Carakan — это ECMScript-движок, который является лишь частью веб-движка Presto.
так что если версии Presto совпадают, то, конечно, и отдельные части движка идентичны, в том числе и JS.
угу, пару раз на заказ, довольно много в образовательных целях.
впрочем есть и опыт с другой стороны — антируткиты/антивирусы :)
просто интересная сфера.
Хе, тоже планирую начать свой цикл, посвященный этому делу, и скорее всего он будет довольно сильно отличаться от вашего.
Ибо у вас действительно всё как-то куцо и поверхностно, надеюсь исправитесь.
это понятно, но обычно модные фичи декларируются уже в альфе, к бете допиливаются, а до релиза правятся баги.
Так вот, задекларировано не так уж и много плюшек.
не обязательно лочить шину, для реализации выбранного примера достаточно инструкций xchg и mov, которые по-дефолту являются атомарными (mov насколько я помню требует выравнивания, но это не проблема, конечно).
Но никак не гигабайтами, и только во время абсолютного простоя, ибо ниже приоритета 0 нету ничего :)
Так что это слабо опровергает мои слова о том, что необходимо заострять внимание на этом аспекте.
Например, в вышеупомянутой винде код очистки крайне прост.
Дефолтный код:
.text:00430364 __fastcall KiZeroPages(x, x) proc near ; CODE XREF: MiZeroWorkerPages(x,x)+10Dp
.text:00430364 ; KiXMMIZeroPages(x,x)+B5j ...
.text:00430364 push edi
.text:00430365 xor eax, eax
.text:00430367 mov edi, ecx
.text:00430369 mov ecx, edx
.text:0043036B shr ecx, 2
.text:0043036E rep stosd
.text:00430370 pop edi
.text:00430371 retn
.text:00430371 __fastcall KiZeroPages(x, x) endp
И второй вариант с XMMI (extended memory managment):
.text:00430288 __fastcall KiXMMIZeroPagesNoSave(x, x) proc near
.text:00430288 ; CODE XREF: KiXMMIZeroPages(x,x)+84p
.text:00430288 ; DATA XREF: KiInitMachineDependent()+1F0o
.text:00430288
.text:00430288 var_4 = dword ptr -4
.text:00430288
.text:00430288 xorps xmm0, xmm0
.text:0043028B shr edx, 6
.text:0043028E
.text:0043028E loc_43028E: ; CODE XREF: KiXMMIZeroPagesNoSave(x,x)+19j
.text:0043028E movntps xmmword ptr [ecx], xmm0
.text:00430291 movntps xmmword ptr [ecx+10h], xmm0
.text:00430295 movntps xmmword ptr [ecx+20h], xmm0
.text:00430299 movntps xmmword ptr [ecx+30h], xmm0
.text:0043029D add ecx, 40h
.text:004302A0 dec edx
.text:004302A1 jnz short loc_43028E
.text:004302A3 sfence
.text:004302A6 xchg edx, [esp+var_4]
.text:004302AA retn
.text:004302AA __fastcall KiXMMIZeroPagesNoSave(x, x) endp
простой подсчет показывает что только под эти буферы нужно будет 200-300 метров памяти, неужели микшер столько кушает?
это должно быть смешно :)
Мне очень трудно представить когда это является узким местом в программе.
Carakan — это ECMScript-движок, который является лишь частью веб-движка Presto.
так что если версии Presto совпадают, то, конечно, и отдельные части движка идентичны, в том числе и JS.
впрочем есть и опыт с другой стороны — антируткиты/антивирусы :)
просто интересная сфера.
Ибо у вас действительно всё как-то куцо и поверхностно, надеюсь исправитесь.
Так вот, задекларировано не так уж и много плюшек.
Atom-то, кстати, развиваете?