~ 24 Oct 2011, 02:29
Бях обещал да напиша упътване за нещото, наречено AMD SimNow™.
SimNow, най-общо, е пълен симулатор на дадено PC, дори несъществуващo такива. Ако по "Компютърни Архитектури" са ви казвали, че процесорите са софтуер (което е вярно), и се тестват (софтуерно) стотици хиляди часове, преди да се появят като реален кристал (което също е вярно), то ето това е една от програмите, които прави тези симулации.
SimNow работи на много ниско ниво, изчислявайки, например, как протича комуникацията с паметта (чиято точна скорост и тайминги също се емулира), какво прескача по хипертранспорта и още много други детайли...
Цената на всичко това е много ниската скорост на емулация - например, с 3200 MHz процесор емулирате уж 2 гигахерцов, но със скорост на емулацията 50-100 MIPS.
Действително, симулацията просто "тече" по-бавно от реално време (противно на DosBox, VMWare и други). Т.е., процесора вътре в емулатора се приема за работещ с фиксирана скорост, и понеже емулирането му с 1:1 скорост е невъзможно, просто времето се "разтяга": вътре в емулатора, "sleep 1s" ще отнеме 10 секунди, ако текущата скорост на емулиране е 200 MIPS. Ако гледате филмче вътре в емулатора, то ще "върви" без "засечки", но много по-бавно. При другите емулатори обикновено е обратно, програмата ще се усети, че процесора е бавен, ще пусне framedrop и т.н.
С горното вероятно ви убедих, че ползването на този емулатор е свързано с мноооого чакане. Затова е добре да се оборудвате с лека и оптимизирана гостуваща OS. Освен това, правенето на виртуален твърд диск не е особено лесно, но затова пък CD .ISO файлове се поддържат много добре и най-лесно е да се насочите към някоя от леките LiveCD linux дистрибуции - аз ползвах Puppy Linux 5.28. Това е една доста добра дистрибуция: не казва нито "гък" за това, че я пускате върху процесор, за който въобще не е чувала, зарежда за приемливо време (десетина минути, нищо работа), но веднъж като зареди, всичко върви прилично. Вероятно ще ви подразни липсата на синхронизация между курсорите в домакинската и гостуващите OS. С настройка на чувствителността на мишката в puppy, общо взето сте готови.
SimNow ви позволява да си "сглобите" каквато машина си пожелаете. Има асортимент от налични хардуерни модули (видеокарти, южни мостове, процесори,...), но навързването им не е лека играчка, за това можете да отворите просто една от готовите конфигурации, които идват с инсталацията. Например, за Bulldozer има само една конфигурация, vp_bd_phase1.bsd.
Има още една пречка, преди да заработи емулацията с вашето Live CD. Boot приоритетите в BIOS указват HDD да са преди CD, и по подразбиране това ще ви доведе до грешка "Invalid (or missing) operating system". За да оправите това, влезте си в BIOS (който... е ... ами, истински) и го оправете. Restart и voilà!
Следва недобре документираният момент, как да вържете вашата виртуална машина с реалния свят. SimNow не поддържа Copy/Paste между гост и домакин, няма споделени папки, така че най-лесният вариант е да си закачите виртуалната машина към LAN. Виртуализирането на мрежата под SimNow е направено гъвкаво, но (поне за начало) - сложно. Откъм госта е лесно - той вижда Е1000 мрежова карта. Откъм домакина, SimNow очаква да се върже към сървърен процес, наречен "медиатор". Него трябва да си го стартирате ръчно. Този медиатор е реалната изходна точка на емулирания трафик към света. Т.е., ако гостът иска да ping-не google.com, пакетът първо се праща през E1000 емулацията, после SimNow тунелира пакета към медиатора (който спокойно може да работи и на друга машина) и после пакетът се появява от сървъра, евентуално NAT-нат, или директно, все едно E1000-ката е бриджната за реалната LAN мрежа. Вариантът с бридж e най-лесен, затова ще опиша него. Преди да пуснете SimNow, пуснете програмката "mediator", с аргументи -p <port> (например: "./mediator -p 8888"). Медиаторът ползва libpcap и затова изисква root привилегии. След което, пуснете вашата симулация, и в командния терминал на SimNow (обикновено, това е конзолата, от която сте извикали ./simnow) трябва да укажете как да се свърже с медиатор-сървъра. За целта напишете "setMediatorHost localhost:8892" (тук числото е <port> + 4). След това следват командите "linkConnect down" и "linkConnect auto", с което E1000-ката ще каже на гост OS-а, че е вързан (в случая, все едно нова карта е закачена към вашия LAN). Така комуникацията е уредена и можете да си работите на машината. Малък момент - неизвестно защо, не можех да пингвам госта от домакина, макар и да можех от друга машина в моя LAN. Демек, за да кача файл в госта, първо го upload-вах на файловия сървър вкъщи, след което си го свалях с wget от госта. За щастие, puppy идва както с wget, така и с unzip :)
След цялото това нещо, сигурно се питате - добре де, защо ни е въобще да правим емулация?
В моя случай, това беше единственият начин да проверя, дали ми работи реализацията на ucbench с XOP инструкции — без да си купувам реално Булдозер. Което, всъщност, и нямаше как да направя, преди датата му на пускане! Конфигурацията vp_bd_phase1.bsd поддържа XOP и FMA4, при това с истинската им скорост: когато подкарах ucbench и тествах как се представя новият код, то резултатите бяха около 50% подобрение - което, както се оказа, отговаря точно на това, което се получи и на реалния Булдозер!
Финални думи: емулатора работи само на 64-битови AMD процесори. Пише си го, като изискване, на сайта. В лагера на Интел, положението е същото, но неофициално: те имат подобен емулатор (който пробвах през м. Март), който също симулира още несъществуващи процесори. Само че, ако се направите на нахални и се опитате да го пуснете на AMD процесор, програмката уж тръгва и след малко гърми със Segmentation Fault. Същата програма, пусната на 14 пъти по-слаб Intel процесор (Atom, vs. Thuban), работи без засечки :D. Да живеят междуфирмените удари под кръста :]
#1 от feydun, изпратено на 15 Mar 2012, 07:19
I stumbled on this blog while looking at SimNow. Then I started browsing the blog - excellent stuff!
#2 от X1l10on, изпратено на 16 Jan 2014, 16:58
Hello, thanks a lot for this tutorial, but i'm stuck with the mediator, when i launch it i receive the error:
"./mediator: error while loading shared libraries: libpcap.so.0: cannot open shared object file: No such file or directory"
even with libpcap0.8, libpcap-dev and libpcap0.8-dev installed.
#3 от anrieff, изпратено на 20 Jan 2014, 17:06
There are several things that can cause the shared library issue. Most probably, the mediator requires a specific version of libpcap, where yours is different. Make sure that the pcap you're installing is for the same architecture (e.g., you might be installing 64-bit libs where the simulator is 32 - you can check that by issuing the command "file <somebinary>". Finally, if you've installed libpcap into some specific locations (e.g. outside /usr), consider using "export LD_LIBRARY_PATH=/the/path/to/libpcap/dir" before running the simulator.
Have phun!