Копане на BURST - под лупа

Всичко за Биткойн, Лайткойн "копането" басейни, хардуер, софтуер...

Модератор: Moderators

Re: Копане на BURST - под лупа

Мнениеот Mateev » 21 Яну 2018, 19:07

А сега нека да си изясним какво представлява един файл с лотарийни билети. Неговата структура е предопределяща за всичко, което се извършва преди него (плотването) и след него (копането). Преди това обаче трябва да си изясним няколко понятия (термини), които ще ги използваме в по-нататъшните обяснения:

Shabal
Това е алгоритъм за създаване на хешове, който нарочно е направен да бъде бавен и труден. Идеята е никога никой да не може да създаде ASIC чип и ASIC машина, като така всъщност се гарантира бъдещата ДЕЦЕНТРАЛИЗАЦИЯ на криптовалутата BURST. Използват се 256 битови хешове, така че в литературата и в интернет ще го срещнете като Shabal256.

Nonce
Това е число, което нищо не означава, но когато то е част от блока, който се хешва със Shabal256, на изхода се получават различни хешове. Нещата са малко по-сложни но за практически цели е достатъчно да знаем, че когато ние променяме Nonce от 0 до например 1 милион, то така ние създаваме 1 милион РАЗЛИЧНИ ЛОТАРИЙНИ БИЛЕТИ. Тъй като това число е 8 байта (64 бита), то това означава, че във всеки един наш акаунт ние можем да създадем по 18 446 744 073 709 551 616 различни лотарийни билета, уникални в целия свят.

Няма да ни стигнат дисковете в целия свят, за да си запишем на тях собствените си лотарийни билети, така че искаме или не ние ще ще трябва да изчислим и да запишем на диск само една малка част от тях. При това положение няма никакво значение какви точно Nonce-та ще изберем, защото всички са равновероятни. Има само значение да не направим глупоста да записваме едни и същи Nonce-та в различните наши файлове.

Проблемът се разрешава с една Excel-ска таблица, в която си водим сметка на всички изгенерирани файлове по всички дискове на всичко компютри, и за всеки един от тях отбелязваме какво е неговото начално Nonce и колко Nonce-та след него има в същия този файл. И гледаме да не се застъпват, като не ни пука за дупките (липсващите Nonce-та) в пространството между два файла.

От практически опит научих, че е много важно началното Nonce и броя на Nonce-тата в един файл да са кръгли десетични числа, които много лесно се възприемат от човек и много лесно може да се провери да не би случайно да са застъпени Nonce-тата в два различни файла. Аз практикувам така - определил съм си, че една моя дискрета съдържа точно 1 милион Nonce-та. Те се побират във файл с размери от 256 000 000 KB (244 MB или 0.244 TB). Позволявам си да правя и по-големи файлове с по 5 или дори с по 10 милиона Nonce-та в тях, но винаги се придържам към кръгло начално Nonce и към кръгъл брой Nonce-та във всеки един файл. Така само с един поглед в Excel-ския файл установявам дали някъде не съм направил застъпване на Nonce-та.
Mateev
 
Мнения: 786
Регистриран на: 20 Дек 2017, 09:55

Re: Копане на BURST - под лупа

Мнениеот Mateev » 21 Яну 2018, 19:33

А сега малко за структурата на едно Nonce, защото от нея зависят всички останали разсъждения за бързодействие и оптимизация на компютъра, за плотването и за самото копане.

Едно Nonce съдържа 8192 Shabal256 хеша по 256 бита (32 байта). Така общата му дължина става 8192 * 32 = 266 144 байта. Всеки 2 съседни хеша са групирани в така наречения Scoop, като по този начин едно Nonce винаги съдържа точно 4096 Scoop -а. По време на копането BURST мрежата за всеки един следващ блок случайно избира един от тези 4096 Scoop-a и казва на компютрите по света да прочетат САМО НЕГО и нищо друго.

Това е много важен момент, на базата на който се строи цялата последваща логика на нашите оптимизации. Всеки ще се досети за лесната част, а тя е че по време на копането при всеки един блок се чете само една 4096-та част от целия файл. И от тука лесно ще можем да изчислим какво време ще ни е необходимо за четене при различни по размер твърди дискове и при различна скорост на трансфер (вътрешен диск, мрежов диск, USB диск и т.н.).

Трудното идва с разположението на данните вътре във файла и респективно на самия диск. Представете си един файл като огромна двумерна таблица. Във всеки един ред от тази таблица има по едно Nonce. Ако във файла има 1 милион Nonce-та, то това означава, че в таблицата има 1 милион реда. Тъй като всяко едно Nonce има по 4096 Scoop-а, то това автоматично означава, че таблицата има 4096 колони. А във всяка една клетка на таблицата има по 1 Scoop от 64 байта, който всъщност се състои от 2 хеша от по 32 байта.
Последна промяна Mateev на 21 Яну 2018, 19:53, променена общо 1 път
Mateev
 
Мнения: 786
Регистриран на: 20 Дек 2017, 09:55

Re: Копане на BURST - под лупа

Мнениеот Mateev » 21 Яну 2018, 19:52

А сега да поразсъждаваме малко около тази огромна двумерна таблица. Самия алгоритъм за изчисляване на едно Nonce ни принуждава то да бъде изчислено на един път, тъй като всеки един хеш представлява хеш на предишния хеш + номера на акаунта. Дори е още по-сложно, защото са навързани 256 хеша един след друг, и на всичкото отгоре най-накрая всички хешове се XOR-ват с най-последния хеш. Повече от ясно е, че всичките тези хешове трябва да се правят с висока скорост в някакъв буфер в паметта на компютъра, и не съществува друг начин на изчисления.

Тоест таблицата се изчислява РЕД ПО РЕД !!!

В същото време по време на копането се чете само ЕДИН ЕДИНСТВЕН Scoop от всички Nonce-та. Тоест чете се ЕДНА ЕДИНСТВЕНА КОЛОНА от тази таблица.

И ето ти го най-големият проблем, който НАРОЧНО е заложен да бъде такъв от разработчиците на концепцията на криптовалутата BURST - Таблицата се изчислява по редове, а се чете по колони. Как една такава таблица да я запишем да диска?
1. Ако записваме ред по ред, после при четенето на 1 Scoop от 1 милион Nonce-та ще се наложи главата на диска да се премести 1 милион пъти.
2. Ако записваме файла колона по колона, то тогава четенето ще е бързо, но по време на записа ще се наложи преместим главата на диска 1 милион пъти. Освен това този вариант е немислим, тъй като изчисленията се извършват ред по ред, а не колкона по колона.

Близко е до ума, че записа се извършва само веднъж, а четенето - хиляди пъти, така че е повече от ясно, че ФАЙЛА ЩЕ БЪДЕ ОПТИМИЗИРАН ЗА ЧЕТЕНЕ, за сметка на огромното загубено време за неговия запис (неговото изчисляване и плотване).
Последна промяна Mateev на 23 Яну 2018, 00:11, променена общо 1 път
Mateev
 
Мнения: 786
Регистриран на: 20 Дек 2017, 09:55

Re: Копане на BURST - под лупа

Мнениеот Mateev » 21 Яну 2018, 20:27

От натрупаната до момента информация вече можем да започнем да изчисляваме и оптимизираме различните параметри на плотване и копане. Програмата за плотване се нарича XPlotter и последната нейна версия автоматично се Download-ва от QBundle тогава, когато се опитате да си създадете първия файл посредством менюто Tools / Plotter. Можете да го пробвате с цел експеримент, но аз не ви препоръчвам да работите с графичния интерфейс, защото е много дървен, бъгав, неудобен за работа и ще ви вкара в една камара грешки. Пуснете го веднъж, колкото да ви изтегли програмата XPlotter, и повече никога не го ползвайте.

Много по-удобно се работи с XPlotter директно с Command Prompt, защото първо си редактирате Bat файла и в него описвате всички дискове и всички файлове, които искате да плотвате, както и параметрите на самото плотване. Затова по-нататък ще опиша използването на XPlotter именно посредством директното негово стартиране посредством създаден от вас Bat файл. За да ви е по-лесно да го използвате, копирайте си неговите файлове в директория D:\Program FIles\XPlotter. В тази директория (в продукта) има следните файлове:
- Readme.txt - Инструкция на Английски
- Readme_ru.txt - Инструкция на РУски
- StartXPlotter.bat - файл, който трябва да го редактирате и посредством който трябва да стартирате плотера
- XPlotter_sse.exe - програма на плотера, която използва SSE инструкциите на процесора. Това е най-бавната версия.
- XPlotter_avx.exe - програма на плотера, която използва AVX инструкциите на процесора, ако има такива. Това е по-бързата версия.
- XPlotter_avx2.exe - програма на плотера, която използва AVX2 инструкциите на процесора, ако има такива. Това е най-бързата версия.

Вие трябва да проверите с какви комплекти инструкции е окомплектован вашият процесор, и да изберете най-бързите такива, за да плотвате с тях. Проверката става с програмата CPUZ, която свободно можете да си я изтеглите от Internet. Другия вариат е да пробвате AVX2 програмата и ако гръмне, пробвате AVX. Ако и тя гръмне, програмата със SSE инструкции задължително ще тръгне.

Ето как изглежда един Bat файл, който аз съм си го редактирал да ми плотне един диск:

@setlocal
@cd /d %~dp0

XPlotter_sse.exe -id 12834538172559065902 -sn 396000000 -n 1000000 -t 5 -path I:\BURST
XPlotter_sse.exe -id 12834538172559065902 -sn 397000000 -n 1000000 -t 5 -path I:\BURST
XPlotter_sse.exe -id 12834538172559065902 -sn 398000000 -n 1000000 -t 5 -path I:\BURST
XPlotter_sse.exe -id 12834538172559065902 -sn 399000000 -n 1000000 -t 5 -path I:\BURST
XPlotter_sse.exe -id 12834538172559065902 -sn 400000000 -n 1000000 -t 5 -path I:\BURST
XPlotter_sse.exe -id 12834538172559065902 -sn 401000000 -n 1000000 -t 5 -path I:\BURST
XPlotter_sse.exe -id 12834538172559065902 -sn 402000000 -n 1000000 -t 5 -path I:\BURST

@pause
Mateev
 
Мнения: 786
Регистриран на: 20 Дек 2017, 09:55

Re: Копане на BURST - под лупа

Мнениеот Mateev » 21 Яну 2018, 20:42

В показания от мене bat файл от файла по подразбиране съм ползвал само първите 2 и последния ред. Те не се пипат. Между тях съм сложил редица от мои редове със стартиране на плотера, като в подробности ще обясня защо е направено точно така.

Първо се вижда, че от трите програми аз използвам най-лошата - XPlotter_sse.exe. Това е така защото процесора на този компютър не поддържа AVX и AVX2 инструкции. При вас може да е друго - просто проверете кои инструкции поддържа вашия процесор и сложете тази програма в началото на всеки един ред.

Параметър -id
При мене има стойност 12834538172559065902, но при вас ще е друга. Това всъщност е вашият Numeric Account, който можете да го видите в Account Manager-а, като селектнете акаунта и погледнете какво пише в десния прозорец. Това всъщност е 8-байтовото число, което участвува във всеки един хеш на всеки един Scoop на всяко едно Nonce. Числото си е само ваше и няма второ такова в целия свят, което означава, че изгенерираните с него Nonce-та (лотарийни билети) също са уникални в целия свят.

Каквито и файлове да плотвате, по каквито и да било дискове по всички компютри, винаги за параметър -id трябва да използвате това число и никакво друго. Вашият акаунт може да копае само с файлове, изгенерирани само с това число и с нищо друго. Смените ли си акаунта, трябва да плотвате отново всичките си файлове, но когато видите колко бавен и труден процес е това, бързо бързо ще се откажете да експериментирате с повече от един акаунт.
Последна промяна Mateev на 23 Яну 2018, 00:14, променена общо 1 път
Mateev
 
Мнения: 786
Регистриран на: 20 Дек 2017, 09:55

Re: Копане на BURST - под лупа

Мнениеот Mateev » 21 Яну 2018, 20:54

Параметър -Path
При мене това е I:\BURST, но при вас ще е друго. Важното е да се знае, че плот файловете не могат да се разполагат в основната директория на диска, така че задължително трябва да си създадете една директория, и аз съм си я кръстил BURST. Вие можете да си я кръстите по друг начин, но е хубаво после да го спазвате това и да е еднаква по всички дискове, които плотвате.

Някои хора по света си мислят, че плот файловете са привързани към името на диска и/или към името на директорията. Чел съм го из интернет, но ТОВА НЕ Е ВЯРНО. Плот файловете са привързани само и единствено към вашият Numeric Account. Спокойно можете да си ги генерирате по всякакви дискове и по всякакви компютри, и после да си ги местите насам-натам из мреждата или между компютрите. Можете да ги слагате и в директории с всякакви имена. Тези неща нямат никакво значение - има значение само факта, че даден плот файл е създаден с определен Numeric Account и с него може да копае само същия този акаунт и никой друг. И разбира се другото важно нещо - Nonce-тата да не се застъпват или припокриват, защото това ще предизвика грешки, пък и ще е пилеене на дисково пространство.
Mateev
 
Мнения: 786
Регистриран на: 20 Дек 2017, 09:55

Re: Копане на BURST - под лупа

Мнениеот Mateev » 21 Яну 2018, 21:21

Параметри -sn и -n
С тези параметри се контролира какви Nonce-та да има в дадения файл, и колко на брой да са те.

-sn - начален номер (номер на първото Nonce във файла)
-n - Брой на Nonce-тата във файла с последователни номера след началния номер.

Например: -sn 396000000 -n 1000000
Това означава, че във файла ще има точно 1 милион Nonce-та, като номера на първото Nonce е равен на 396 милиона. Дефакто във файла ще се изгенерират 1 милион последователни Nonce-та, започвайки от номер 396 000 000 и стигайки до номер 396 999 999. Файла ще има размер = 1 милион Nonce-та * 4096 Scop-а * 64 байта = 262 144 000 000 байта / 1024 = 256 000 000 kB / 1024 = 250 000 MB / 1024 = 244.14 GB / 1024 = 0.238418 TB.

Видяхте как се правят сметките и е хубаво предварително да си ги направите, преди да планирате колко файла ще плотнете в един твърд диск. Аз вече ви дадох ориентир с файл, съдържащ точно 1 милион Nonce-та. Аз използвам точно такива файлове, или файлове, съдържащи по 5 или по 10 милиона Nonce-та. По малки файлове не правя, защото не си струва труда. По-големи файлове не правя, защото е много тъпо след 1-2 денонощия плотване файла да се повреди при мигване на тока или при автоматичен рвстарт след някой ъпдейт на Windows-а.

Някои хора в интернет твърдят, че в един твърд диск трябва да има само един файл, защото така ставало най-бързото четене. Това НЕ Е ВЯРНО. Вече разбрахте, че по време на копане от всеки файл на диска се чете само една 4096-та част, като секторите на тази част (Scop-овете) са плътно долепени един до друг. Тоест няма никакви паразитни местения на главата насам-натам из целия файл. При това положение ако файловете на диска са повече от 1 - например 10, то при прехвърлянето на главата между тях ще се загубят максимум 10 пъти по 10 милисекунди. Така че можете да си позволите лукса файловете да са повече от един, но все пак не се престаравайте да правите хиляди файлове - тогава наистина ще има някакво малко забавяне.

От практическа гледна точка аз съм установил следното:
- Диск 2 TB - побира 7.5 милиона Nonce-та, които можете да ги разбиете на 15 файла по половин милион или 7 файла по милион и един с половин милион или пък 3 файла по 2.5 милиона.
- Диск 4 TB - побира 15 милиона Nonce-та, като на мене ми е най-удобно да ги разбия в 3 файла по 5 милиона
- Диск 6 TB - побира 22.5 милиона Nonce-ta, като е най-добре да се разбият на 4 файла по 5 милиона и 1 файл с 2.5 милиона

В така направените разчети освен кръглото количество Nonce-та на един диск съм оставил и малко незаето място, защото ако един диск се запълни на 100% с плот файлове, Windows-a започва непрекъснато да вади прозорци с грешка Disk Full. Това е така защото той се нуждае от малко място за скритите си служебни файлове, и ако не му оставите такова място, ще ви побърка от грешки.
Последна промяна Mateev на 23 Яну 2018, 00:19, променена общо 1 път
Mateev
 
Мнения: 786
Регистриран на: 20 Дек 2017, 09:55

Re: Копане на BURST - под лупа

Мнениеот greo » 21 Яну 2018, 21:24

благодаря! :)
Аватар
greo
 
Мнения: 488
Регистриран на: 08 Окт 2013, 19:56

Re: Копане на BURST - под лупа

Мнениеот Mateev » 21 Яну 2018, 21:57

Параметри -t и -mem
Това са двата най-важни параметъра:
-t - брой на процесорните нишки, с които ще се изчисляват Nonce-тата
-mem - количеството на паметта, която трябва да се задели за тези нишки. Ако параметъра липсва (както е при мене), то тогава се заделя по около 0.5 GB на нишка.

На пръв поклед колкото по-много памет и колкото по-много нишки, толкова по-добре. Да, ама това е грешна стратегия, и много бързо ще се убедите в това. На практика по време на плотването се случват следните неща:
1. Всяка една нишка работи сама за себе си, и си заделя (блокира) памет за точно 2048 Nonce-та или това прави малко над 0.5 GB по Default.
2. Тази памет се дели на 2 части (два буфера) от по 1024 Nonce-та, и докато процесора смята в единия буфер, втория буфер се записва на диска.
3. След това двата буфера си разменят местата и пак в единия се смятат Nonce-та, а другия в това време се записва на диск.
4. И тука настъпва състезание по време - ако процесора бързо напълни единия буфер, но диска не е записал другия, процесора започва да чака диска.
5. Ако диска бързо запише втория буфер, преди процесора да е изчислил първия, то тогава диска започва да чака процесора.
6. При това положение е близко до ума, че най-бързо смятане и плотване ще имаме тогава, когато записа върху диска тече със скорост, с която се смятат новите nonce-та - ни по-бързо, ни по-бавно. Всяко едно разбалансиране на този крехък баламс ще доведе до пилеене на ресурси и разбира се до по-бавно плотване от теоретично възможното.

В случая имаме взаимодействие на 3 хардуера - процесор, памет и диск, и всеки един от тях може да се окаже тясното място, което силно да лимитира скороста на целия просес на плотване. И за да постигнете максимума, ще се наложи малко да понаправите експерименти и на базата на тях да си оптимизирате настройките, иначе можете да изпаднете в ситуацията да чакате по 1 месец за плотването на 1 диск.

В следващите постинги подробно ще опиша всеки един от тези аспекти.
Mateev
 
Мнения: 786
Регистриран на: 20 Дек 2017, 09:55

Re: Копане на BURST - под лупа

Мнениеот Mateev » 21 Яну 2018, 22:46

Започвам с твърдия диск, тъй като в повечето съвременни компютри той се явява тясното място. Причината за това вече ви я казах - всяко едно Nonce се записва на 4096 различни места във файла, защото съдържа в себе си 4096 различни Scoop-а. Това означава 4096 местения на главата на нова писта, 4096 изчаквания върху пътечката, докато въртенето на диска докара под нея верния сектор, 4096 четения на този сектор, 4096 модифицирания на част от байтовете, ново изчакване на един оборот на диска, запис на модифицирания сектор, ново изчакване на 1 оборот на диска, четене на записания сектор за проверка на записа. И всичко това по 4096 пъти за записването на някакви пикливи 256 MB, които при последователен запис биха се записали 100 пъти по-бързо.

От тука идват и огромния брой оплаквания на хората от изключително бавното плотване. Сменят USB 2.0 дисковете USB 3.0, и пак плотването е бавно. Сменят външните дискове с въпрешни и пак плотването е бавно. Купуват скъпи и прескъпи дискове и пак плотването е бавно. Правят RAID масиви и пак плотването е бавно. Правят се всякакви други глупости, чакат се дни и седмици наред, и най-накрая много хора се отказват заради нерешимите на пръв поглед проблеми.

Няма как да накараме главите на дисковете да се движат по-бързо, но можем да измислим някои хитринки. Например:

1. Ако искаме на един компютър да плотнем 5 диска, вместо да ги плотваме един по един, най-добре е да ги пуснем ЕДНОВРЕМЕННО да се плотват и 5-те, като направим 5 различни bat файла със съответните параметри и разделим наличните ядра между 5-те паралелни плотвания.

2. Втората хватка е да увеличим количеството памет, което го предоставяме на всяка една нишка. Вече казах, че по Default тя си взема около 0.5 GB, която памет стига за 2 блока от по 1024 Nonce-та. Един Scoop е 64 байта, което означава че на диска едновременно се записват по 1024 Scoop-a, или това прави точно 64 kB. Тоест главата записва 64 kB и след това сменя пътечката, за да запише следващите 64 кВ и така 4096 пъти. Ако удвоим паметта, която ползва една нишка, то тогава тя ще има място не за 2 блока от по 1024 Nonce-та, а за 2 блока по 2048 Nonce-та. Главата пак ще се премести 4096 пъти, но на всяко местене вече ще записва не по 64, а по 128 kB. Тоест с удвояването на паметта сме удвоили скороста на запис.

Ако компютъра има много RAM памет, раздайте я всичката на нишките, и така ще постигнете максимално възможната скорост на запис на диска, защото на всяко едно местене на главата ще се записват по-големи порции от данни. При това забележете - много по-добри резултати можете да постигнете с една нишка с много заделена за нея памет, отколкото с 8 нишки с по минимума от 0.5 ГБ. Просто поекспериментирайте малко, преди да пуснете плот и после да чакате няколко дена, псувайки се, че сте заложили грешни параметри.

Един много важен извод от всичко това е че няма никакво значение какво е бързодействието на диска. Колкото и да е супер бърз, ограничител за плотването се явява не неговия интерфейс, а броя на местенията на главата и размера на порцията данни, която се записва на едно местене. От практиката мога да ви кажа, че при грешни настройки скороста на запис на диска може да падне до под 1 MB/С, и да чакате плотването 1-2 седмици. При добре направени настройки можете да вдигнете скороста на запис до 12-14 MB/s. Само при RAID масиви може да се наблюдават по-високи скорости, но не с много.

Няма никакво значение дали диска е външен или вътрешен - все работи бавно, далече под скороста на самия интерфейс. Следователно смело можете да си купувате дори и USB 2.0 дискове, стига да са много евтини. Това, че диска е USB 3.0 не ви дава никакво преимущество. Това че е вътрешен диск също не ви дава преумущество. Това че оборотите му са по-големи от 5400 също не ви дава преимущество.

За да постигнете максимално възможната скорост на плотване ползвайте следните трикове и препоръки:
1. Фoрматирайте диска само с NTFS и с размер на клъстера 64 kB.
2. Плотвайте едновременно всички възможни дискове в компютъра.
3. Разпределете нишките развномерно между всичките дискове и им дайте на разположение всичката възможна свободна памет. Не им давайте памет, която вече е заета от друг процес, защото така ще накарате компютъра да използва Pagefile, и така силно ще забавите плотването.
4. Проверете дали случайно на диска не са включени Shadow Copies и ако са - изключете ги, защото те също драстично ще забавят записа.
5. Вижте в ресурс монитора дали антивирусната ви програма не се меси в записа и не го забавя допълнително. Ако да - изключете я.
6. Ако това е външен USB диск, вървете в Device Manager и включете Write кеша на Windows-a. По Default той е изключен за външни USB дискове, и ако се включи, може да ускори записа.
7. Ако настройките позволяват, включете и хардуерния Write кеш на самия диск.
8. Компютъра ви задължително трябва да е с UPS, за да не ви прекъсне някакво мигване на тока.
9. Задължително изключете автоматичния рестарт на WIndows 10 в неактивните часове, когато му дойде нов ъпдейт.
10. Записвайте на един диск поне по 4-5 файла с един Bat файл, за да може ако нещо прекрати записа, поне вече завършените файлове да не ги започвате отново. Когато се случи такъв гаф с прекъсване на плотването, аз гледам колко файла на диска са плотнати, и изтривам последния, защото той със сигурност не е довършен. Другите ги оставям и отбелязвам в Excel-а, че са готови.
11. Едновременно плотвайте по всички възможни компютри, които имате, пък после ще размествате дискове и файлове, за да ги наместите там, където ще ви е най-изгодно да копаете.

Още от сега ви казвам, че 99% от времето си ще го загубите в един или друг проблем около плотването, и само 1% време ще ви е достатъчен да подкарате всичко останало.
Последна промяна Mateev на 23 Яну 2018, 00:02, променена общо 3 пъти
Mateev
 
Мнения: 786
Регистриран на: 20 Дек 2017, 09:55

ПредишнаСледваща

Назад към Mining - Общи Дискусии

Кой е на линия

Регистрирани потребители: AJB, Bing [Bot], Google [Bot], ionicle, Kartoff, puffyto, viniamin