вторник, 31 марта 2020 г.

SDN

SDN, OpenFlow (wiki, habr):
1) Программно-определяемая сеть (на английском SDN)
2) OpenFlow
3) OpenFlow SDN
4) Эволюция в сетях Дата-Центров. Программно-определяемые сети SDN 


Reconfigurable Match-action Table (RMT):
1) dRMT: Disaggregated Programmable Switching (to print)
2) Forwarding Metamorphosis: Fast Programmable Match-Action Processing in Hardware for SDN
https://www2.cs.duke.edu/courses/fall19/compsci514/papers/rmt-sigcomm2013.pdf (to print)
3) https://www.coursera.org/learn/sdn/lecture/1sk09/programmable-chipsets-rmt
4) https://en.wikipedia.org/wiki/P4_(programming_language)

MPLS traffic engineering (wiki, habr):
1) MPLS
2) https://www.youtube.com/watch?v=cQ9Qe1dJFl4
3) https://habr.com/ru/post/246425/
4) https://habr.com/ru/post/338578/
5) wfq https://www.opengl.org.ru/postroenie-virtualnykh-chastnykh-setei/weighted-fair-queuing-wfq.html

Вики (реализация в "железе"):
1) https://en.wikipedia.org/wiki/Network_search_engine
2) https://en.wikipedia.org/wiki/Network_processor
3) https://en.wikipedia.org/wiki/Application-specific_integrated_circuit
4) https://en.wikipedia.org/wiki/Content-addressable_memory (в русской вики "Ассоциативная память")

Книги, статьи (реализация в "железе"):
1) Семья Олифер - Компьютерные сети
2) Weirong Jiang, Viktor K. Prasanna - Towards Practial Architectures for SRAM-based Pipelined Lookup Engines (to print)

NIC (сетевая карта, сетевой адаптер):
1) Brent Stephens, Aditya Akella, Michael M. Swift - Your Programmable NIC Should be a Programmable Switch https://yadi.sk/i/7P4B5zZ0QHwo3Q
2) Alex Forencich, Alex C. Snoeren, George Porter, George Papen - Corundum: An Open-Source 100-Gbps NIC https://cseweb.ucsd.edu/~snoeren/papers/corundum-fccm20.pdf
2) https://ru.wikipedia.org/wiki/TCP_Offload_Engine
3) https://en.wikipedia.org/wiki/Line_card

OpenVSwitch:
1) https://www.openvswitch.org/
2) https://ru.wikipedia.org/wiki/Open_vSwitch
3) https://github.com/openvswitch/ovs
4) https://habr.com/ru/post/467801/

OpenVSwitch (настройка):
1) Open vSwitch как ядро виртуальной сети
2) Разделяй и властвуй. Используем Open vSwitch для разделения виртуалок между VLAN
3) http://xgu.ru/wiki/Open_vSwitch
4) Замена стандартного Linux Bridge на Open vSwitch
5) https://ivirt-it.ru/open-vswitch-create-switch/
6) http://vladimir-stupin.blogspot.com/2016/06/open-vswitch-debian.html
7) http://fedoraway.blogspot.com/2017/03/openvswich-kvm-vlan.html

Алгоритмы maximum size match, maximum weight match на паросочетаниях в двудольных графах

Теория очередей (массового обслуживания), теория вероятности, мат. статистика:
1) Теория массового обслуживания
(на английском https://en.wikipedia.org/wiki/Queueing_theory)
2) Вероятностный алгоритм (на английском полнее)
3) Динамическая система (вики)
4) Эргодичность (вики)
5) Вероятностное пространство (вики)
6) Распределение Бернулли (вики)
7) распределение бернулли https://www.youtube.com/watch?v=J3P7I7pgxBs
8) распределение бернулли https://www.youtube.com/watch?v=Wb_MhlRwTlk
9) Случайный процесс
10) Стохастичность
11) Распределение Пуассона
12) Распределение вероятностей
13) Случайная величина
14) http://mathprofi.ru/raspredelenie_i_formula_puassona.html
15) распределение пуассона часть 1 https://www.youtube.com/watch?v=rfznj8Woc5I
16) Биномиальное распределение

Распределение Гаусса:

Распределение Лапласа:
3) Медиана (статистика)

Дисперсия случайной величины:
1) Дисперсия случайной величины (русская вики)
2) Дисперсия случайной величины (вики итмо)
3) Числовые характеристики случайных величин
http://old.exponenta.ru/educat/class/courses/tv/theme0/3.asp

Стохастические модели:
1) https://studfile.net/preview/5553697/page:9/
2) https://chem21.info/info/1569478/

QoS, scheduling:
7) https://en.wikipedia.org/wiki/Traffic_shaping
8) Теория телетрафика (https://en.wikipedia.org/wiki/Teletraffic_engineering)
9) https://en.wikipedia.org/wiki/Traffic_flow_(computer_networking)
10) Моделирование трафика (https://en.wikipedia.org/wiki/Traffic_generation_model)
11) https://ru.wikipedia.org/wiki/FIFO
12) Round-robin (на английском)
13) https://en.wikipedia.org/wiki/Network_scheduler (приведен список алгоритмов шедулинга пакетов)
14) https://en.wikipedia.org/wiki/Packet_switching
15) https://ru.wikipedia.org/wiki/LIFO
16) https://en.wikipedia.org/wiki/Weighted_round_robin
17) https://en.wikipedia.org/wiki/Deficit_round_robin
18) https://en.wikipedia.org/wiki/Work-conserving_scheduler
19) https://en.wikipedia.org/wiki/Virtual_output_queueing
20) https://en.wikipedia.org/wiki/Head-of-line_blocking
23) https://en.wikipedia.org/wiki/Generalized_processor_sharing

Графы, транспортная сеть, паросочетания:
1) https://en.wikipedia.org/wiki/Matching_(graph_theory) (на русском Паросочетание)
2) Двудольный граф
3) https://en.wikipedia.org/wiki/Maximum_cardinality_matching (MSM)
4) https://en.wikipedia.org/wiki/Maximum_weight_matching (MWM)
5) Транспортная сеть (https://en.wikipedia.org/wiki/Flow_network)
6) Задача о максимальном потоке
7) https://en.wikipedia.org/wiki/Flow_graph_(mathematics)
8) https://en.wikipedia.org/wiki/Traffic_flow

Network scheduler algorithms (articles):
1) Tiny Tera: a packet switch core (VOQ)
2) A Practical Scheduling Algorithm to Achieve100% Throughput in Input-Queued Switches
3) Input-queued switches: Scheduling algorithms for a crossbarswitch (слайды)
4) Analysis of scheduling algorithms that provide 100% throughput in input-queued switches
Wfq implementation:
1) Взвешенная справедливая очередь (русская вики, есть описание хода алгоритма WFQ) ( английская вики WFQ)
2) Описание хода алгоритма WFQ
http://www.mathcs.emory.edu/~cheung/Courses/558/Syllabus/11-Fairness/WFQ.html
3) Abhay K. Parekh and Robert G. Gallager A Generalized Processor Sharing Approach to Flow Control in Integrated Services Networks: The Single-Node Case http://www.cs.columbia.edu/~ricardo/misc/docs/gps.pdf (первое описание алгоритма wfq, если верить http://www.mathcs.emory.edu/~cheung/Courses/558/Syllabus/11-Fairness/WFQ.html)
4) Пример реализации wpq проекте gini
5) https://github.com/Bluefissure/WFQ-Algorithm-in-QoS-Queue-Scheduler
6) Kenji Yoshigoe and Kenneth J. Christensen - An Evolution to Crossbar Switches with Virtual Output Queuing and Buffered Cross Points
https://www.researchgate.net/publication/3282919_An_Evolution_to_Crossbar_Switches_with_Virtual_Output_Queuing_and_Buffered_Cross_Points
7) Nick McKeown, Adisak Mekkittikul, Venkat Anantharam, Jean Walrand - Achieving 100% Throughput in an InputQueued Switch
http://yuba.stanford.edu/~nickm/papers/IEEE_COMM_V3.pdf
8) Sang-Ho Lee, Dong-Ryeol Shin, Hee Yong Youn  - Weighted Fair Scheduling Algorithm for QoS of Input-Queued Switches https://link.springer.com/chapter/10.1007/978-3-540-30141-7_51 (есть описание алгоритмов WFQ)

Pifo implementation:
1) Programmable Packet Scheduling at line rate http://web.mit.edu/pifo/
2) C++ code for reference model of the PIFO hardware
https://github.com/programmable-scheduling/pifo-machine
3) Verilog code for PIFO hardware design
https://github.com/programmable-scheduling/pifo-hardware
4) A. Demers, S. Keshav, and S. Shenker. Analysis and Simulation of a Fair Queueing Algorithm
http://ccr.sigcomm.org/archive/1995/jan95/ccr-9501-shenker.pdf
5) J. C. R. Bennett and H. Zhang. Hierarchical Packet FairQueueing Algorithms
https://www.cs.cmu.edu/~hzhang/papers/TON-97-Oct.pdf
6) M. Shreedhar and G. Varghese. Efficient Fair Queuing using Deficit Round Robin
http://pages.cs.wisc.edu/~akella/CS740/S07/740-Papers/SV95.pdf
7) P. Goyal, H. M. Vin, and H. Chen. Start-time Fair Queueing: A Scheduling Algorithm for Integrated Services Packet Switching Networks
http://ccr.sigcomm.org/archive/1996/papers/goyal.pdf
8) P. McKenney. Stochastic Fairness Queuing
http://www2.rdrop.com/~paulmck/scalability/paper/sfq.2002.06.04.pdf

Задача поиска максимального паросочетания:
1) http://math.nsc.ru/LBRT/k4/LOR/lor_Theme6.pdf (лекционный курс)
2) Алгоритм Форда-Фалкерсона (вики)
3) http://acm.mipt.ru/twiki/bin/view/Algorithms/BipartiteMatchingCPP (реализация)
4) Алгоритм Форда-Фалкерсона для поиска максимального паросочетания (реализация)
5) http://algolist.ru/maths/graphs/maxflows/Ford_Fulkerson.php
6) https://www.youtube.com/watch?v=u9NigdVHUr0
7) https://www.youtube.com/watch?v=aDaiFQp9Ugo (паросочетания двудольного графа)
8) https://e-maxx.ru/algo/kuhn_matching

Maple:
1) графы в maple http://eqworld.ipmnet.ru/ru/library/books/Kirsanov2007ru.pdf (программы)
2) maple trial https://www.maplesoft.com/products/maple/free-trial/?IC=10355

IP packet:
1) https://ru.wikipedia.org/wiki/IP (на английском https://en.wikipedia.org/wiki/IPv4#Packet_structure)
2) https://en.wikipedia.org/wiki/Protocol_data_unit
3) Битовое поле

пятница, 27 марта 2020 г.

Измерение времени выполнения кода с помощью rdtsc, rdtscp

1. rdtsc

Начиная с gcc 4.5 функция __rdtsc() определена под MSVC и под GCC, надо только в коде включить разные хэдэры:

#if defined(_WIN32) 
#include <intrin.h>
#endif

#if !defined(_WIN32) 
#include <x86intrin.h> 
#endif

До gcc 4.5 можно запилить следующее определение функции rdtsc для windows и linux:

//! windows
#if defined(_WIN32)
#include <intrin.h>uint64_t rdtsc(){ 
  return __rdtsc();
}

#endif

//! linux
#if !
defined(_WIN32) 

uint64_t ull rdtsc() {
  unsigned int lo, hi;
  asm volatile ( "rdtsc" : "=a" (lo), "=d" (hi) );
  return ((uint64_t)hi << 32) | lo;
}

#endif

Ссылки:
1) https://ru.wikipedia.org/wiki/Rdtsc
2) Максимально точное измерение кода https://habr.com/ru/post/147852/
3) Измерение кода с наносекундной точностью https://habr.com/ru/post/425237/
4) Оптимизация длинной арифметики на C++ https://habr.com/ru/post/135590/
5) (!) https://stackoverflow.com/questions/13772567/how-to-get-the-cpu-cycle-count-in-x86-64-from-c
6) https://stackoverflow.com/questions/9887839/how-to-count-clock-cycles-with-rdtsc-in-gcc-x86
7) https://stackoverflow.com/questions/19941588/negative-clock-cycle-measurements-with-back-to-back-rdtsc
8) (!) https://stackoverflow.com/questions/51818655/clflush-to-invalidate-cache-line-via-c-function/
9) http://www.mkurnosov.net/uploads/Main/mkurnosov-rdtsc-2014.pdf
10) Примеры https://ru.wikibooks.org/

asm rdtsc:
1) https://c9x.me/x86/html/file_module_x86_id_278.html
2) https://www.felixcloutier.com/x86/rdtsc
3) http://www.club155.ru/x86cmd/RDTSC

2. rdtsp:

Ссылки:
1) https://www.intel.com/content/dam/www/public/us/en/documents/white-papers/ia-32-ia-64-benchmark-code-execution-paper.pdf
2) https://stackoverflow.com/questions/12631856/difference-between-rdtscp-rdtsc-memory-and-cpuid-rdtsc

asm rdtsp:
1) https://www.felixcloutier.com/x86/rdtscp

3. out-of-order code execution:
1) Внеочередное исполнение (английская статья)
2) Lecture 14 - Out-of-Order Execution - Carnegie Mellon - Computer Architecture 2013 - Onur Mutlu https://www.youtube.com/watch?v=LU2W-YtyeEo
3) Out of Order Load Store Execution - Georgia Tech - HPCA: Part 3
https://www.youtube.com/watch?v=WC5Bo9UdI2w

4. lfence

Ссылки:
1) Барьер памяти
2) https://stackoverflow.com/questions/7346893/out-of-order-execution-and-memory-fences

asm lfence:
1) https://www.felixcloutier.com/x86/lfence
2) https://c9x.me/x86/html/file_module_x86_id_155.html

5. cpuid

Ссылки:
1) https://ru.wikipedia.org/wiki/CPUID
2) https://stackoverflow.com/questions/32662518/cpuid-rdtsc-and-out-of-order-execution

6. tsc frequency

Links:
1) https://stackoverflow.com/questions/51919219/determine-tsc-frequency-on-linux

7. CPUID features relevant to the TSC

Links:
1) https://stackoverflow.com/questions/13772567/how-to-get-the-cpu-cycle-count-in-x86-64-from-c
2) https://unix.stackexchange.com/questions/43539/what-do-the-flags-in-proc-cpuinfo-mean

8. calc tsc freq by call usleep, nanosleep, delay in asm and rdtscp

Links:
1) https://stackoverflow.com/questions/10921210/cpu-tsc-fetch-operation-especially-in-multicore-multi-processor-environment
2) https://stackoverflow.com/questions/3830883/cpu-cycle-count-based-profiling-in-c-c-linux-x86-64
3) https://stackoverflow.com/questions/2814569/calculating-cpu-frequency-in-c-with-rdtsc-always-returns-0
4) https://stackoverflow.com/questions/12777254/time-delay-in-c-usleep/12777296
5) https://linux.die.net/man/3/usleep
6) https://stackoverflow.com/questions/7684359/how-to-use-nanosleep-in-c-what-are-tim-tv-sec-and-tim-tv-nsec
7) https://man7.org/linux/man-pages/man2/nanosleep.2.html
8) https://stackoverflow.com/questions/15201955/how-to-set-1-second-time-delay-at-assembly-language-8086
9) https://stackoverflow.com/questions/19580282/nasm-assembly-linux-timer-or-sleep/19580595#19580595


9. getting cpu frequency (rate) to produce nanoseconds from ticks

9.1. Можно получить текущую частоту процессорных ядер по отдельности при помощи следующей команды:

cat /proc/cpuinfo | grep "MHz"

Или так (вместо * можно написать номер ядра):

sudo cat /sys/devices/system/cpu/cpu*/cpufreq/cpuinfo_cur_freq

Или так без sudo:

cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq

9.2. Общую частоту можно получить так:

lscpu | grep MHz

Или так:

sudo dmidecode -t processor | grep Speed

Ссылки:
1) https://stackoverflow.com/questions/35123379/getting-tsc-rate-in-x86-kernel
2) https://www.systutorials.com/measuring-time-accurately-in-programs/
3) https://en.wikipedia.org/wiki/Time_Stamp_Counter
4) (!) https://askubuntu.com/questions/218567/any-way-to-check-the-clock-speed-of-my-processor
5) https://unix.stackexchange.com/questions/264632/what-is-the-correct-way-to-view-your-cpu-speed-on-linux
6) http://btorpey.github.io/blog/2014/02/18/clock-sources-in-linux/
7) not using rdtsc https://stackoverflow.com/questions/5248915/execution-time-of-c-program
8) (!) https://stackoverflow.com/questions/42189976/calculate-system-time-using-rdtsc
9) https://ru.wikipedia.org/wiki/Skylake

Cash misses:


Некоторая статистика по микропроцессорам, частоте и предельным таймерам:

1) SoC BBB - микроконтроллер TI AM3358 - микроархитектура ARM Cortex-A8 - частота 1 ГГц = 10^9 Гц - регистры 32 бит. Предельный идеальный таймер  - с размерностью 32 бит и точностью 1 / 10^9 = 1 наносекунда.

2) SoC Raspberry Pi 3B - микроконтроллер Broadcom BCM 2837 - микроархитектура ARM Cortex-A53 - частота 1.2 ГГц - регистры 64 бит. Предельный идеальный таймер  - с размерностью 64 бит и точностью 1 / 10^9 = 1 наносекунда.

3) SoC STM32 "BluePill" - микроконтроллер STM32f103 - микроархитектура ARM Cortex M3  - частота 32 МГц - регистры 32 бит. Предельный идеальный таймер  - с размерностью 32 бит и точностью 1 / 10^6 = 1 микросекунда.

4) SoC STM32 f429 Discovery - микроконтроллер STM32f429 - микроархитектура ARM Cortex M4  - частота 180 МГц - регистры 32 бит. Предельный идеальный таймер  - с размерностью 32 бит и точностью 1 / 10^6 = 1 микросекунда.

5) Микропроцессор Intel Core i5 520m - микроархитектура Westmere - частота 2.4 ГГц - регистры 64 бит. Предельный идеальный таймер  - с размерностью 64 бит и точностью 1 / 10^9 = 1 наносекунда.

High Resolution Timer In Linux (links):
1) https://elinux.org/High_Resolution_Timers
2) https://www.kernel.org/doc/Documentation/timers/hrtimers.txt
3) https://stackoverflow.com/questions/6749621/how-to-create-a-high-resolution-timer-in-linux-to-measure-program-performance
4) https://forum.qt.io/topic/31369/high-resolution-timer
5) https://stackoverflow.com/questions/15730765/qt-high-resolution-timer

6) Методы измерения кода помимо rdtsc https://habr.com/ru/post/282301/
7) Оптимизация кода для эльбрусов https://habr.com/ru/company/smartengines/blog/317672/

Вики разных единиц измерения скорости вычисления операций процами:
1) https://en.wikipedia.org/wiki/Instructions_per_second
2) https://en.wikipedia.org/wiki/Instructions_per_cycle
3) https://en.wikipedia.org/wiki/Cycle_per_second
4) https://en.wikipedia.org/wiki/Cycles_per_instruction
5) https://en.wikipedia.org/wiki/Normalized_frequency_(unit)
6) https://en.wikipedia.org/wiki/Heinrich_Hertz

четверг, 26 марта 2020 г.

Использование git

С hg я не использую консольные команды, обычные задачи покрываются графической оболочкой TortoiseHg на Fedora 31 и Windows 10. Описание значков интерфейса здесь.

На windows 10 для работы с git я использую Git for Windows, другие графические среды (например, SmartGit, SourceTree, TortoiseGit) перечислены здесь. Сейчас (13.01.2023) использую под виндой TortoiseGit, он по функциональности близок к TortoiseHg (на момент написания статьи (27.03.2020) был косячный). Под линукс планирую использовать простую консоль.

github:
1) How to push git repo from Windows 10 CMD https://www.youtube.com/watch?v=ZPDnCfMhbA8

Команды для bash:

1) Создаем новый репозитарий в текущей папке. Например, у меня в Windows Git Bash в текущей папке /c/Projects/Makefile/MyTestQtProject уже есть папка с qt-проектом:

cd /c/Projects/Makefile/MyTestQtProject
git init

В результате в папке /c/Projects/Makefile/MyTestQtProject создается подпапка .git с репозитарием.

2) Добавляем отдельные файлы из проекта под вирсионный контроль:

git add main.cpp

Удаляем неправильно поставленные файлы с версионного контроля (например, файлы проекта, которые у каждого разработчика могут быть свои):

git rm --cached myproject.pro

3) Смотрим статус по добавленным в репозитарий (changes to be commited) файлам, ненаходящимся под версионным контролем (untracked):

git status

4) Создаем файл исключений .gitignore (как .hgignore), дальше приводится содержимое для qt-проекта:

syntax: glob

*.user*
*~
ui_*
moc_*
.fuse*
.qmake*

*.o
*.pdb

Makefile*
MyTestQtProject

debug
release

5) Коммитим изменения:

git commit

После ввода откроется выбранный текстовый редактор (под виндой удобно поставить notepad++, под линукс по умолчанию ставится vim). После ввода надо сохранить изменения (самый простой способ записать изменения в vim - нажать клавишу "escape" и набрать "wq" (сохранить изменения и выйти)).

Можно сразу ввести коммит с меткой:

git commit -m "start"

6) При последующих коммитах, если изменения касаются только уже добавленных на версионный контроль файлов, коммитить можно следующим образом:

git commit -a -m "continue"

7) Для работы из строки надо представиться системе:

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

8) Создаем на gitlab-е через web-интерфейс проект, получаем путь к проекту вида git@git.medteco.ru:username/gitrepo. Коммитим существующий локальный репозитарий:

git remote add origin <ssh-репозитарий gitlab>
git push -u origin master

9) Получаем изменения с удаленного сервера (origin):

9.1) Получаем изменения с удаленного сервера gitlab (origin):

git remote add origin <ssh-репозитарий gitlab>
git pull origin master

https://githowto.com/pulling_changes

9.2) Получаем изменения из соседней папки (origin):

git remote add origin /d/Projects/ti/git/tda3_ccs831
git pull origin master

Удаляем:
git remote remove origin

https://komodor.com/learn/how-to-fix-fatal-remote-origin-already-exists-error/

10) Клонируем существующий репозитарий на gitlab'е в текущую папку:

git clone <ssh-репозитарий gitlab>

git clone https://192.168.73.30/devs/devs/gen3

11) Восстанавливаем файлы из локального репозитария ("откатываем" изменения до последнего коммита):

git restore .

12) Переключаемся на нужный коммит:

git checkout <хэш коммита>

Для переключения на последний коммит в ветке master:

git checkout master

13) Создаем новую ветку develop для коммита cca1cd03bb4a5bf3077681beff9899bda770e19e:

git branch develop cca1cd03bb4a5bf3077681beff9899bda770e19e

Чтобы слить изменения в ветке с master:
git checkout master
git merge develop

https://stackoverflow.com/questions/8953206/how-do-i-move-my-commits-from-no-branch-to-an-actual-branch

14) Переключаемся на ветку develop:

git switch develop

14.1) Затянуть изменения из внешнего хранилища и смерджить с содержимым ветки:

git pull (origin master)
git branch --set-upstream-to=origin/master develop
git merge


15) Отобразить список доступных веток:

git branch --list

16) git log:

Сложный вывод с показом ветвлений:
git log --pretty=format:"%h - %an, %ar : %s"

Последние 2 коммита:
git log -2

16) Удаляем из ещё незакомиченного кэша (но уже выполнен git add) бинарные ненужные для версионного контроля файлы (вроде *.o, *.obj или целая папка в студии Debug), которые почему-то вовремя не оказались в .gitignore:
git rm -r --cached test_client/Release/*

17) git diff не работает по текстовым файлам UTF-16, которые по умолчанию формирует VS2017;

18) Подключаемся к новому удаленному репозитарию с созданным проектом, переключаемся на ветку master, заливаем в него файлы только ветки master, коммиты, бранчи, а потом все ветки активного проекта:
git remote add origin <https-git-репозитарий>
git branch -M master
git push -u origin master
git push --all

git push --set-upstream <remote-name> <localbranch>

Workaround:


Ссылки (hg):
1) Hg Init: Часть 2. Основы Mercurial https://habr.com/ru/post/108658/
2) https://habr.com/ru/post/274877/

Ссылки (git):
1) основные консольные команды https://habr.com/ru/post/336708/ (!)
2) hgignore https://git-scm.com/docs/gitignore
2) hg commit

Ссылки (обзор git):
1) https://habr.com/ru/company/playrix/blog/345732/
2) https://habr.com/ru/post/437000/
3) https://habr.com/ru/post/472600/
4) https://habr.com/ru/post/342116/
5) https://habr.com/ru/post/440816/
6) https://habr.com/ru/post/174467/
7) https://habr.com/ru/post/125799/

Useful:
1) Переход с Mercurial на GIT в Atlassian Bitbucket с сохранением файлов в кириллице

git branch:

вторник, 24 марта 2020 г.

Установка Fedora 31 ноут с технологией nvidia optimus и переключение между двумя видеокартами в ноуте asus n61jv

В ноуте asus n61jv используется внешняя видеокарта Nvidia GeForce GT 325 M, которая работает совместно со встроенной в ядро процессора core i3. Технология Nvidia Optimus оставляет за ядром GPU NVidia выбор того, какую из двух карт использовать в данный момент. Встроенная работает с нетребовательными к ресурсам приложениями, внешняя - со всеми остальными. Переключение через BIOS, в данном случае, невозможно, так как в нем (AMI BIOS) в конкретной модели нет такой опции IGD/PEG.

1. Windows 10. В винде есть возможность переключиться через специальное приложение от разработчика соответствующей видеокарты.

2. Fedora 31. В линуксе раньше не было такого приложения от разработчика, потом появился проект switchero (ноут asus n61jv - в списке поддерживаемых). Затем появился проект NVIDIA Optimus Bumblebee, в последней федоре он предустановлен по умолчанию.

При старте установки с liveusb-флешки с включенной в биосе uefi-mode установка сразу зависала. После выключения uefi-mode в биосе и установки флешки в верх приоритетного списка, загрузка пошла, но после сообщения "started gnome display manager" показался курсор и больше ничего. В dmesg ошибки nouveau drivers. Это происходит из-за конфликта между картами. Лечится редактирование стартовых параметров в грубе на liveusb, войти в редактирование конкретной строки запуска можно нажав "Tab". Надо добавить следующий параметр в конец через пробел nomodeset (решение отсюда). Теперь liveusb-система запускается, ставим.

Добавляем free и non-free репозитарии rpm-fusion:

sudo dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm

Устанавливаем последние драйверы nvidia и включаем поддержку cuda:

sudo dnf install akmod-nvidia
sudo dnf install xorg-x11-drv-nvidia-cuda #optional for cuda/nvdec/nvenc support

После установки пакетов в файле /etc/default/grub у меня прописано:

GRUB_CMDLINE_LINUX="rd.driver.blacklist=nouveau modprobe.blacklist=nouveau nvidia-drm.modeset=1 ... nomodeset ..."

akmod - это специальный модуль ядра; убедиться, что он собран и подключен можно командой:

modinfo -F version nvidia

У меня выдает 440.82.

Но при этом стандартная загрузка с использование видеокарты nvidia не идет. И у меня в такой конфигурации система показывает опять только курсор и больше ничего. При загрузке появляются сообщения логера:

Started Builds and install new kmods from akmod packages
Starting Fallback to nouveau as nvidia did not load

Работает загрузка с использование стандартного драйвера nouveau. Для этого на этапе выбора пункта grub для загрузки надо удалить следующую часть команд загрузки:

rd.driver.blacklist=nouveau modprobe.blacklist=nouveau nvidia-drm.modeset=1

И добавить "nomodeset". В этом случае загрузка идет. 

Определим видеокарту:

/sbin/lspci | grep -e VGA
/sbin/lspci | grep -e 3D



nvidia driver:
1) (!) https://rpmfusion.org/Howto/NVIDIA
2) http://us.download.nvidia.com/XFree86/Linux-x86/367.57/README/supportedchips.html
2) https://rpmfusion.org/Howto/Optimus
3) https://rpmfusion.org/Configuration
4) (!) https://russianfedora.github.io/FAQ/hardware.html
5) Как в Linux взламывать пароли видеокартой и центральным процессором https://hackware.ru/?p=12264

bugs:
2) https://docs.fedoraproject.org/en-US/fedora/rawhide/system-administrators-guide/kernel-module-driver-configuration/Working_with_the_GRUB_2_Boot_Loader/
3) https://www.reddit.com/r/Fedora/comments/duo0de/nvidia_optimus_on_fedora_31/
4) https://www.easycoding.org/2017/01/11/pravilnaya-ustanovka-drajverov-nvidia-v-fedora.html
5) https://forums.kali.org/showthread.php?36680-HELP-Installing-Kali-Linux-on-a-Nvidia-Optimus-system
6) https://askubuntu.com/questions/886629/how-can-i-successfully-boot-my-ubuntu-live-usb

2) https://docs.fedoraproject.org/en-US/quick-docs/bumblebee/

dkms:
3) Зачем нужен DKMS? https://www.linux.org.ru/forum/general/7982729
4) Автоматическая сборка модулей ядра при помощи DKMS https://habr.com/ru/post/266399/

nvidia akmod, cuda:
1) Установка, настройка и тестирование Fedora 21 Workstation на личном или игровом компьютере https://habr.com/ru/post/245651/
8) Правильная установка драйверов NVIDIA в Fedora https://www.easycoding.org/2017/01/11/pravilnaya-ustanovka-drajverov-nvidia-v-fedora.html

Как работает процессор (кэш процессора, предсказатель переходов и т.д.)

Предсказатель переходов, спекулятивность современного процессора:
1) https://en.wikipedia.org/wiki/CPU_cache (на русском)
2) https://en.wikipedia.org/wiki/Branch_predictor (на русском)
3) https://en.wikipedia.org/wiki/Memory_timings
4) История предсказания переходов с 1 500 000 года до н.э. по 1995 год
5) https://fcenter.ru/online/hardarticles/processors/13736-Pentium_4_Misticheskij_i_zagadochnyj_Trace_kesh
6) https://wfoojjaec.eu.org/ru/projects/news/2019-05-16-what-is-speculative-execution.html
7) Распараллеливание вычислений за счет использования кастомного предиктора в проекте DVM (1, 2)

Asm x86:
1) https://ru.qwe.wiki/wiki/CPUID
2) Устройство Стека для Intel386 https://habr.com/ru/articles/675522/



Как работает процессор:
1) Как работает CPU: интерактивный урок для начинающих https://habr.com/ru/post/240929/
2) Я не знал, как работают процессоры, поэтому написал программный симулятор https://habr.com/ru/post/453158/
3) Зачем процессорам нужен кэш и чем отличаются уровни L1, L2, L3 https://habr.com/ru/company/vdsina/blog/515660/
4) КАК РАБОТАЕТ ПРОЦЕССОР https://www.youtube.com/watch?v=RwSLO953anc
5) Как работает процессор https://www.youtube.com/watch?v=kIrKeKiJt90
6) Как работает процессор, просто о сложном https://www.youtube.com/watch?v=gcAvhi9sOvA
7) Как работает процессор? https://tproger.ru/explain/how-cpu-works/
8) КАК РАБОТАЕТ ПРОЦЕССОР КОМПЬЮТЕРА? https://losst.ru/kak-rabotaet-protsessor-kompyutera

VLIW:

Спекулятивное исполнение команд:
3) Внеочередное и спекулятивное исполнения стали брешью в безопасности почти всех компьютеров https://nplus1.ru/news/2018/01/04/meltdown

Книги:
1) Дэвид Харрис, Сара Харрис "Цифровая схемотехника и архитектура компьютера" (скачать)
2) J.L.Hennessy, D.A.Patterson. Computer Architecture: A Quantitative Approach. 2007 (pdf)

Кэш-память:
1) Логическая организация кэш-памяти процессора https://habr.com/ru/post/179647/
2) Секреты кэш-памяти, или как потратить 1000 тактов на 10 команд https://habr.com/ru/post/187654/
3) (!)Кэш

Аппаратное устройство:

Устройство компьютерной программы:

понедельник, 23 марта 2020 г.

Ремонт видеокарты gtx 260

1. Конфигурация компа:

1) motherboard - msi h61m-e23 (драйверы под винду 10);
2) CPU - Intel Pentium CPU G640 2.80GHz (в процессорное ядро встроено видеоядро) (драйверы под винду 10)
3) GPU - Galaxy GTX 260 896MB (драйверы под винду 10) (обзоры overclockersoverclockersgecidixbtcnet)
4) SDRAM DDR3 - две планки kingston kvr1333d3n9/2g - всего 4 гига

2. BIOS не видит внешнюю видеокарту gtx 260, но при этом цепь питания кулера видеокарты цела, он запускается

Ссылки (ремонт видеокарты Galaxy GTX 260):
1) Материнка MSI h61m-p21 (b3) не видит Radeon RX 480
2) Недоремонт MSI GTX 260 (пропайка GPU)
3) Ремонт видеокарты после другого мастера
4) ремонт gtx 260
5) ремонт gtx 260
6) Самоучитель по ремонту видеокарт
7) https://www.youtube.com/watch?v=IrkmU9BO7Tw
8) https://www.youtube.com/watch?v=B970HN6Sx_g

3. разгон CPU, GPU, оперативки:

1) Overclocking with h61/67
2) Помогите с MSI H61(M)-P31(G3)
3) GTX 960 Overclock Tutorial
4) Overclocking GTX 1080Ti using MSI Overclocking Scanner
5) https://www.youtube.com/watch?v=4B5x8qPba6Y
6) https://www.youtube.com/watch?v=tWrahkrITxw
7) https://www.youtube.com/watch?v=U8Ime8xM1ZM
8) https://www.youtube.com/watch?v=PN5xKUuaFNk

4.Видеокарта своими руками:
1) https://eater.net/vga (на русском частичный перевод)

5. Ремонт компьютерного БП:
1) https://www.youtube.com/watch?v=wV07MgG_b5Y

воскресенье, 22 марта 2020 г.

Benchmarking

CPU-Z download. GPU Caps Viewer download.

Мои конфигурации:


1. chipset h61 msi, socket LGA1155:

1) motheboard - msi h61m-e23 (драйверы под винду 10, realtek audio alc887 for win10, ещё);
2.2) old CPU - Intel Pentium CPU G640 2.80GHz (в процессорное ядро встроено видеоядро) (драйверы под винду 10

3.1) nvidia gt-710 - 2gb
3.2) old GPU - Asus EAX 550 256MB DDR (no opencl/cuda support) (другая - Leadtek WinFast PX7300 GS 256MB, spec (no opencl/cuda support), drv);

4.1) ddr3 radeon 8gb x 2
4.2) old sdram ddr3 - две планки kingston kvr1333d3n9/2g - всего 4 гига


2. chipset h61 asus, socket lga1155:

1) motherboard - asus p8h61-m lx3 r2.0 (есть дрова для win10 x64 )
1.1) bugs https://helpadmins.ru/chto-znachit-power-supply-surges-detected-during-the-previous-power-on/

2.2) old CPU - Intel Pentium CPU G645 2.9GHz (в процессорное ядро встроено видеоядро) 



3. gigabyte chipset ga-g31m-es2c, socket lga 775:

1) motheboard - gigabyte ga-g31m-es2c;
2) CPU - Intel Core 2 Duo E7500 2.93GHz;
3) GPU - AMD RADEON HD 7600 SERIES - 256MB (drivers);
4) DDR2 800 MHz - 4gb - две планки по 4gb (https://aliexpress.ru/item/1005002899160329.html), но из каждого модуля материнка видит только по 2gb (Материнка GIGABYTE GA-G31M-ES2C (rev. 1.1) не видит всю память https://forum.ixbt.com/topic.cgi?id=9:69844).

4. chipset asus h81m-k, socket lga 1150:
1) motherboard socket 1150 - asus h81m-k
2) cpu socket 1150 - i3-4150
3) ddr3 radeon 8gb x 2 - 5200р.
5. chipset gigabyte ga-h81m-s2pv, socket lga 1150:
1) motherboard socket 1150 - gigabyte ga-h81m-s2pv
2) cpu socket 1150 - i3-4150
3) ddr3 radeon 8gb x 2 - 5500р. на 12.05.22
4) GPU - chipset nvidia gt-710 2gb https://aliexpress.ru/item/1005003137511264.html?sku_id=12000024294891147 (4200р. на 12.05.22) (geforce 700 series);
5) display - dexp 32" - 81см. - 1920x1080 hdmi - 15000р. на 12.05.22
6) hd - sata seagate barracuda 1тб. - 4800р. на 12.05.22
7) cooler for socket 1150 - id cooling - 600р. на 12.05.22

6. chipset z87 (есть поддержка pci-express 3.0) asus, socket lga1150:
1) motherboard socket lga1150 - ga-z87x-d3h - 5000р. б/у на 14.10.23
2) cpu socket 1150 - i7-4770 - 4700р. б/у на 14.10.23
3) gpu - amd rx580 8gb (pci-express 3.0) - 7000р. б/у на 13.09.23
3.1) питание для gpu amd rx570 - блок питания 450Вт., для rx580 - 500Вт. 
4) gpu - nvidia gtx 970 4gb (pci-express 3.0) - 7000р. б/у на 13.09.23
4.1) питание для gtx970 - 500Вт.
5) про 4- и 8-пиновые разъемы питания процессоров https://club.dns-shop.ru/blog/t-104-bloki-pitaniya/29642-nuansyi-podklucheniya-pitaniya-protsessora/

Выбор блока питания для игровой видеокарты, например, gtx 970 4GB (обзор):

1) Как проверить бу видеокарту перед покупкой? https://www.youtube.com/watch?v=LEE2w96c_pw&ab_channel=VIK-on
5) Radeon RX 5500 XT 8GB в 25 актуальных играх при Full HD: Зачем тебе 8 ГБ видеопамяти? https://www.youtube.com/watch?v=sWC7cive3e8&ab_channel=GECID.com
6) Sapphire NITRO+ RX 5500 XT 8G SE – обзор видеокарты https://www.youtube.com/watch?v=MsKXPPMeESE&ab_channel=ITCommunity
7) Radeon RX 5500 XT против RX 6500 XT: обзор, разгон и тест в 14 играх https://www.youtube.com/watch?v=meAKYTeDSSE&ab_channel=SpecList
8) Я купил последнюю видеокарту с магазина Radeon RX 5500 XT https://www.youtube.com/watch?v=Co2jLXk76fY&ab_channel=Nitroxsenys

Свист дросселей:
2) Из-за чего свистят дроссели и как с этим бороться https://club.dns-shop.ru/blog/t-104-bloki-pitaniya/106976-iz-za-chego-svistyat-drosseli-i-kak-s-etim-borotsya/
3) Шум дросселей видеокарты (?) https://www.youtube.com/watch?v=0XdD6CaXH6Q&ab_channel=BLINDHOUND
4) Свист(писк) дросселей на видеокартах NVIDIA GTX/RTX. Как убрать? https://www.youtube.com/watch?v=OhoFLsoF4FU&ab_channel=Ramtech

Ноуты:

1. Конфигурация ноута asus n61ja:
1) chipset - Mobile Intel® HM55 Express Chipset;
2) CPU - Intel® Core™ i5 Processor 520M 2.4 GHz;
3) GPU - ATI Mobility HD 5730 1GB (дрова на win10 - WHQL-Win8.1-Win7-Catalyst-15.7.1-Oct30);
4) SDRAM DDR3 1066 - 4gb;

2. Конфигурация ноута asus n61jv:
1) chipset - Mobile Intel® HM55 Express Chipset;
2) CPU - i3;
3) GPU - NVIDIA® GeForce® GT325M , 1GB DDR3 VRAM with CUDA;
4) SDRAM DDR3 1066 - 4gb;


2. Benchmark Unigine Heaven 4 - Basic preset (windows 10 x86_64):

2.4) chipset asus h81m-k, socket lga 1150:

FPS: 14.9
Score: 376
Min FPS: 6.5
Max FPS: 25.3

Settings
Render: Direct3D11
Mode: 1920x1071 windowed
Preset: Custom
Quality: Low
Tessellation: Disabled


3. GLmark2 (Fedora 31 x86_64):
3.1.1 встроенное в intel g640 видеоядро:
3.1.2 ati radeon x550 256mb:


4. cpuid


Ссылки (glmark2, unigine):
1) glmark2 and expected scores
2) обзор glmark2
3) https://github.com/glmark2/glmark2
4) https://benchmark.unigine.com

Ссылки:
1) Снятие/установка кулера intel https://www.youtube.com/watch?v=nZYRNn3alE4

gt710/gt730 vs gt1030:

Пропал звук при подключении компа к hdmi-телевизору:
1) Нет звука по HDMI при подключении ноутбука или ПК к телевизору https://remontka.pro/no-sound-hdmi-windows/

корпус:
1) Как выбрать корпус для ПК https://www.dns-shop.ru/guide/17a89c56-1640-11e5-a679-00259074e77d/