• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Мой сборщик и флешер

pvvx

Активный участник сообщества
Простите за не скромный вопрос.
В чем преимущество или удобство для сборки, если используешь различные пОрты такие как mingw или WSL ubuntu?
Чем так плох гнутый линукс?
Там нет Visual Studio и прочего хлама, да всё что производиться программного потребляется потребителями на Windows.
Как факт - все процессоры Ryzen у AMD идут с браком - не работают с GCC в Linux. Но это такой малый сегмент пользователей (менее 1%), что AMD не отзывает их и походу даже не собирается разбираться с причиной ошибки там (моё мнение - ошибки в ПО GCC Linux, которые старательно теперь выдают за глюки CPU. На других процах тоже имеются сбои при больших сборках на много потоков в GCC уже много лет.).
В WSL проще, чем в виртуалке. Ничего "пробрасывать" не надо и работают любые *.exe совместно с linux утилитами (хоть в одном sh, make и т.д.).
 
Последнее редактирование:

pvvx

Активный участник сообщества
и тут многопоточность ускоряет в 2 раза, но по сравнению с HDD в 3 раза быстрей
Т.е. Linux не умеет пользовать кеш диска в RAM? Отложенная запись и всё такое...
Пробовал на m.2 PCIE x4 с трафиком 2.4Gbytes/sec запись-чтение - всё те-же единицы выходят. :(
(До около 10 секунд сборки MP3 на RTL"A" и базовой "AT" на RTL"B")
Arduino ещё не ставил... да и не выбрал что будет базовым компом (Ryzen7 или Threadripper)
 
Последнее редактирование:

Алексей.

Active member
В тестах участвовали
1. ubuntu 16.04 + HDD
2. ubuntu 16.04 SSD btrfs + lzo
но почему-то ramdisk не рассматривался,
я к сожалению быстро не нашел сравнений производительности SSD btrfs и tmpfs, может на ram-е быстрее получится?
видел кучу статей как снять нагрузку с SSD увеличить производительности за счет кеширования на ram-e, может стоит попробовать (если не жалко времени :))
 
Последнее редактирование:

pvvx

Активный участник сообщества
но почему-то ramdisk не рассматривался
tmpfs в Win10 WSL ставится так Виртуальный диск в памяти: как создать ramdisk в Linux? - Записки дебианщика
Копируем туда SDK и все остальное...
Создаем configure.sh:
python waf configure
и build.sh:
time python waf -j 32 clean
time python waf -j 32 build

и запускаем его из build.cmd хоть из эксплорера :):
bash configure.sh
bash build.sh
pause

Получаем (Ryzen 7 1700X, чипсет X370, RAM: Dual DDR4-3017 14-15-15-34 CR1, разгонов нет, все установки в Биос - Auto,
Win10 WSL, проект RTL MP3, arm-none-eabi-gcc (15:4.9.3+svn231177-1) 4.9.3 20150529 (prerelease))
:
Код:
user@Ryzen1700x:/mnt/tmpfs/magres-wafmeba$ ./configure.sh
invalid lock file in /mnt/tmpfs/magres-wafmeba
Setting top to                           : /mnt/tmpfs/magres-wafmeba
Setting out to                           : /mnt/tmpfs/magres-wafmeba/build
arm-none-eabi-gcc is not in env or doesn't exists
Checking for program 'arm-none-eabi-gcc' : /usr/bin/arm-none-eabi-gcc
arm-none-eabi-nm is not in env or doesn't exists
Checking for program 'arm-none-eabi-nm'  : /usr/bin/arm-none-eabi-nm
arm-none-eabi-objcopy is not in env or doesn't exists
Checking for program 'arm-none-eabi-objcopy' : /usr/bin/arm-none-eabi-objcopy
'configure' finished successfully (0.020s)

user@Ryzen1700x:/mnt/tmpfs/magres-wafmeba$ ./build.sh
__INCLUDES : ../inc not found
'clean' finished successfully (0.259s)

real    0m0.518s
user    0m0.109s
sys     0m0.375s
Waf: Entering directory `/mnt/tmpfs/magres-wafmeba/build'
__INCLUDES : ../inc not found
[  1/162] Compiling project/src/user/main.c
[  2/162] Compiling project/src/user/wifi_console.c
[  3/162] Compiling project/src/user/atcmd_user.c
[  4/162] Compiling project/src/user/spiram_fifo.c
[  5/162] Compiling project/src/mad/mad_version.c
[  6/162] Compiling project/src/mad/mpg12/layer12.c
[  7/162] Compiling project/src/mad/frame.c
[  8/162] Compiling project/src/mad/layer3.c
[  9/162] Compiling project/src/mad/align.c
[ 10/162] Compiling project/src/mad/decoder.c
[ 11/162] Compiling project/src/mad/huffman.c
[ 12/162] Compiling project/src/mad/fixed.c
[ 13/162] Compiling project/src/mad/bit.c
[ 14/162] Compiling project/src/mad/synth.c
[ 15/162] Compiling project/src/mad/timer.c
[ 16/162] Compiling project/src/mad/stream.c
[ 17/162] Compiling project/src/driver/i2s_freertos.c
[ 18/162] Compiling RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/ram_lib/rtl_bios_data.c
.....
[150/162] Processing ameba_ld: build/project/src/user/main.o build/project/src/user/wifi_console.o build/project/src/user/atcmd_user.o build/project/src/user/spiram_fifo.o
.....
build/RTL00_SDKV35a/component/soc/realtek/8195a/fwlib/ram_lib/rtl_boot.o -> build/app.axf
[151/162] Compiling build/app.axf
[152/162] Compiling build/app.axf
[153/162] Compiling build/app.axf
[154/162] Compiling build/app.axf
[155/162] Compiling build/app.axf
[156/162] Compiling build/sdram.bin.raw
[157/162] Compiling build/ram_2.ota.bin.raw
[158/162] Compiling build/ram_1.bin.raw
[159/162] Compiling build/ram_2.bin.raw
[160/162] Compiling build/ram_1.bin
[161/162] Processing ameba_combine_task: build/ram_2.ota.bin build/sdram.bin -> build/ram_ota.bin
[162/162] Processing ameba_combine_task: build/ram_1.bin.padded build/ram_2.bin build/sdram.bin -> build/ram_all.bin
Waf: Leaving directory `/mnt/tmpfs/magres-wafmeba/build'
'build' finished successfully (5.323s)

real    0m5.592s
user    0m4.359s
sys     0m0.734s
Т.е. вместо 10 +- 1 сек на HDD (или NVMe) выходит 5+ сек + время копирования с m.2 PCIE x4 на скорости к 2 GB/sec. Средняя загрузка проца при сборке ~50%. Антивирусы и другие активные приложения пачками в системе дают тормоз этому делу до 5..7%.
WSL в Win10 сама медлительнее оригинального Linux, но серьезного выигрыша с ramdisk не выходит - его надо записывать и сохранять, писать всякое...
Т.е. могло бы быстрее, но что-то там не так в GCC и 180 Ваттный Ryzen за сотню тыр.руб тоже не ускоряет, относительно простого Ryzen7 1700X за малую цену... Разницы между NVMe на PCIE с древним HDD WD20EARS тоже нет - все вокруг 10+-1 сек и загрузка CPU к 50%. Не научили ещё системы загружать NVMe на полный трафик... и в wind-е успешно работает кэширование дисков.
 
Последнее редактирование:

Алексей.

Active member
Ерунда какая то, msdn говорит что поддерживают реально, а не мапят на hdd.
а как смонтировался сам /mnt/tmpfs
mount | grep '/mnt/tmpfs'
что говорит?
 

pvvx

Активный участник сообщества
Ерунда какая то, msdn говорит что поддерживают реально, а не мапят на hdd.
а как смонтировался сам /mnt/tmpfs
mount | grep '/mnt/tmpfs'
что говорит?
Что не понятно? WSL транслирует запросы к драйверам windows. Всё что идет аппаратно в nix - нафиг.
Вся система linux/ubuntu то в NTFS, в папочке X:\Users\ИмяПользователя\Local Settings\Packages\CanonicalGroupLimited.UbuntuonWindows_xxxxxxx\LocalState\rootfs.
А когда в RAM в tmpfs - то ей винда выделяет кусок памяти и ubuntu там сама копошиться как хочет. От этого немного быстрее запросы туда в ней.
Писано же Микромягкими про WSL - это не виртуалка, а транслятор запросов.
Кому сдалась ещё одна виртуальная машина со своей песочницей? Их и так много для wind-ы.
Или вам не ясно как работает кэширование дисков в windows? Что неиспользуемая RAM используется для кэша дисков и операции с дисками всего в пару раз медленнее чем с RAM (т.к. надо время на разбор с самой организацией файловой структуры)?
 
Последнее редактирование:

Алексей.

Active member
Что не понятно? WSL транслирует запросы к драйверам windows. Всё что идет аппаратно в nix - нафиг.
Вся система linux/ubuntu то в NTFS, в папочке X:\Users\ИмяПользователя\Local Settings\Packages\CanonicalGroupLimited.UbuntuonWindows_xxxxxxx\LocalState\rootfs.
Да при чем тут это, я хотел просто узнать как смонтировался /mnt/tmpfs
я смонтировал рам-диск в 1G и замапил как у Вас на /mnt/tmpfs
и просил только вывести mount | grep '/mnt/tmpfs'
ожидал увидеть tmpfs on /mnt/tmpfs type tmpfs (rw,relatime,size=1048576k)
если это так, то как понимать wsl-file-system-support ведь говорят
VFS defines several file system plugins: VolFs and DrvFs are used to represent files on disk, and the remainder are the in-memory file system TmpFs and pseudo file systems such as ProcFs, SysFs, and CgroupFs.
русским по белому TmpFs и псевдо-фс в памяти, VolFs и DrvFs на диске.
Не понятно почему нет прироста в производительности.
 

pvvx

Активный участник сообщества
TmpFs и псевдо-фс в памяти, VolFs и DrvFs на диске.
Не понятно почему нет прироста в производительности.
Как это нет - 50% есть.
Остальное уходит на системные вызовы у GCC и всякую кривописанную фигню. Наверно просто задержек в GCC понаставили :)
Даже тест, который якобы вызывает ошибки у Ryzen7 при длительной нагрузке в Linux не может загрузить его на 100%. И падает по причине кривописи по привилегиям процессов и нарушения последовательности исполнения в самой GCC vs Linux. Там даже контроль питания мамки говорит что нагрузка не более 30% от номинального TDP.
У WSL ещё хуже с атрибутами файлов и прочими расстановками разрешений. Но она пока ещё в стадии беты :) Там тоже часто есть сбои на вполне работавших ранее программах от Linux в начале, после загрузки. Проходит со временем, видимо после каких-то манипуляций с системой WSL... Вполне это всё может оказаться из-за кривизны дров NVMe и дисков в самой windows для систем Ryzen...
Для Linux про это и говорить пока не о чем - там ещё старые подходы и дрова...
В общем, для "многоядер" пока всё сыро... "на своей шкуре" = испытание на пользователях, и т.д. :)
 
Последнее редактирование:

pvvx

Активный участник сообщества
Учитывая что в ubuntu сборка в waf быстрее чем make, то думаю и в WSL тоже.
[inline]python waf -j24[/inline]
make.sh:
time make -s clean
OTA_IDX=1
time make -s -j 32 all

Для сравнения:
Код:
user@Ryzen1700x:/mnt/tmpfs/sdk40b_at$ ./make.sh
===========================================================
Clean

real    0m0.170s
user    0m0.109s
sys     0m0.063s
===========================================================
Compile (build)
project/src/main.c
../sdk40b/component/common/application/uart_adapter/uart_adapter.c
....
<-- удалено 190 строк с файлами - не лезет в соо -->
....
===========================================================
Link (build)
===========================================================
Image manipulating
===========================================================
b:268435456 s:268455936 e:268460236
size 143545
copy size 4300
b:268435456 s:268455936 e:268460236
size 4300
copy size 4300
b:0 s:0 e:0
size 329344
copy size 329344
CHCKSUM ../sdk40b/component/soc/realtek/8711b/misc/iar_utility/common/tools/checksum1
size = 333676
checksum 20a59bf

real    0m5.279s
user    0m25.484s
sys     0m35.609s
Т.е. те-же 5 сек, но загрузка CPU в % больше. Waf просрал.
Видимо питон не хочет на полную работать - что-то его сдерживает...

если это так, то как понимать wsl-file-system-support ведь говорят
Это устаревшее описание для бета версии WSL начала года.
Win10 после этого уже обновилась, совместно с WSL. По общему смыслу совпадает, но частности другие...
 
Последнее редактирование:

Neov

Member
Видимо питон не хочет на полную работать - что-то его сдерживает...
видимо зорг лукавит и выдает желаемое за действительное :)
я проверял на обычном 4ядерном ноутбучном цпу, результаты выше.
а в ваши скрипты и ваши 100500 ядерники лезть не буду :)
 

pvvx

Активный участник сообщества
видимо зорг лукавит и выдает желаемое за действительное :)
я проверял на обычном 4ядерном ноутбучном цпу, результаты выше.
а в ваши скрипты и ваши 100500 ядерники лезть не буду :)
А зачем мне что-то выдумывать (?) - могу дать все исходные файлы маке с SDK4.0 для "B" серии и сами убедитесь (это не сикретно :)). Я тут выбираю какой комп будет основным дома и на какую концепцию переходить... Говорят надо на VS 2017. Вот счас запустил сборку на ней arm-none-eabi-... в среде WSL... Надо ещё попробовать как будет дружить Eclipse с WSL.
Последние результаты на подгруженном всякими антивирусами и мониторами Ryzen1700x в WSL в tmpfs выходят:
На маке - 5..5.5 сек
На Waf - 6.1..6.5 сек.
Waf-у не запустить 32 потока (по умолчанию у него 16)? Или что там у него?
Могу дать табличку сравнений с 16 по 128 протоков... 32 выходит оптимальнее.
И где у вас результат выше? Сами пишите 14 сек. Проекты практически одинаковы, в "AT" серии "B" файлов больше - там трансляция SSL либы и всей помойки SDK.
Вы думаете на этом будет сильно быстрее? Процессор Qualcomm Centriq 2400: 48 ядер, 18 млрд транзисторов, частота 2,6 ГГц и TDP в 120 Вт :)
Для меня пока выбор определяется экономичностью и бесшумностью совместно с производительностью, т.к. он будет работать непрерывно. И к "энтузиастам" для закупки самых крутых комплектующих в комп - фанатам 3D игр не отношусь, возраст наверно уже не тот :)
 
Последнее редактирование:

pvvx

Активный участник сообщества
@Neov - что подскажите? :
Запускаем bash и в нем [inline]time python waf build[/inline], получаем сплошные ошибки:
Код:
user@wsl:/mnt/c/00/magres-wafmeba$ time python waf build
Waf: Entering directory `/mnt/c/00/magres-wafmeba/build'
[  1/162] Compiling project/src/user/main.c
[  2/162] Compiling project/src/user/wifi_console.c
[  3/162] Compiling project/src/user/atcmd_user.c
[  4/162] Compiling project/src/user/spiram_fifo.c
[  5/162] Compiling project/src/mad/mad_version.c
In file included from /mnt/c/00/magres-wafmeba/project/src/user/atcmd_user.c:5:0:
/mnt/c/00/magres-wafmeba/RTL00_SDKV35a/component/os/freertos/freertos_v9.0.0/source/include/FreeRTOS.h:76:20: fatal error: /mnt/c/00/magres-wafmeba/RTL00_SDKV35a/component/common/api/wifi/rtw_wpa_supplicant/src/stddef.h: Invalid argument
 #include <stddef.h>
                    ^
compilation terminated.

и так далее.... стерто - слишком много ошибок
и такие ошибки:

/usr/include/newlib/stdint.h:64:19: error: missing binary operator before token "("
 #elif __STDINT_EXP(INT_MAX) >= 0x7fff
                   ^
In file included from /mnt/c/00/magres-wafmeba/RTL00_SDKV35a/component/soc/realtek/8195a/misc/rtl_std_lib/include/rt_lib_rom.h:12:0,
                 from /mnt/c/00/magres-wafmeba/RTL00_SDKV35a/component/common/api/platform/platform_stdlib.h:23,
                 from /mnt/c/00/magres-wafmeba/project/inc/mad/global.h:54,
                 from /mnt/c/00/magres-wafmeba/project/src/mad/mad_version.c:26:
/mnt/c/00/magres-wafmeba/RTL00_SDKV35a/component/soc/realtek/8195a/cmsis/device/diag.h:16:37: fatal error: /mnt/c/00/magres-wafmeba/RTL00_SDKV35a/component/common/mbed/api/stddef.h: Invalid argument
 #include <stddef.h> /* for size_t */
                                     ^
compilation terminated.

Итог понятен:
Build failed
-> missing file: '/mnt/c/00/magres-wafmeba/build/project/src/user/atcmd_user.o'
-> missing file: '/mnt/c/00/magres-wafmeba/build/project/src/user/wifi_console.o'
-> missing file: '/mnt/c/00/magres-wafmeba/build/project/src/mad/mad_version.o'
-> missing file: '/mnt/c/00/magres-wafmeba/build/project/src/mad/frame.o'
-> missing file: '/mnt/c/00/magres-wafmeba/build/project/src/user/main.o'
-> missing file: '/mnt/c/00/magres-wafmeba/build/project/src/user/spiram_fifo.o'
-> missing file: '/mnt/c/00/magres-wafmeba/build/project/src/mad/mpg12/layer12.o'

real    0m1.117s
user    0m0.391s
sys     0m0.609s
Не хочет - одни ошибки.
Тогда запускаем так: [inline]time python waf -j 1 build[/inline], всё собирается:
Код:
user@wsl:/mnt/c/00/magres-wafmeba$ time python waf -j 1 build
Waf: Entering directory `/mnt/c/00/magres-wafmeba/build'
[  1/162] Compiling project/src/user/main.c
[  2/162] Compiling project/src/user/wifi_console.c
... Тут часть стерта, чтобы влезло в сообщение - ошибок нет ...
[151/162] Compiling build/app.axf
[152/162] Compiling build/app.axf
[153/162] Compiling build/ram_1.bin.raw
[154/162] Compiling build/app.axf
[155/162] Compiling build/ram_2.bin.raw
[156/162] Compiling build/app.axf
[157/162] Compiling build/ram_2.ota.bin.raw
[158/162] Compiling build/app.axf
[159/162] Compiling build/sdram.bin.raw
[160/162] Compiling build/ram_1.bin
[161/162] Processing ameba_combine_task: build/ram_1.bin.padded build/ram_2.bin build/sdram.bin -> build/ram_all.bin
[162/162] Processing ameba_combine_task: build/ram_2.ota.bin build/sdram.bin -> build/ram_ota.bin
Waf: Leaving directory `/mnt/c/00/magres-wafmeba/build'
'build' finished successfully (53.582s)

real    0m53.682s
user    0m3.203s
sys     0m1.109s
Если скопировать все файлы SDK в среде WSL в новую директорию, то сборка в режиме нескольких потоков (-j 32) проходит.
По этой причине есть намек Do not change Linux files using Windows apps and tools
Что можете подсказать, что-бы waf заработал в WSL в Win10x64 ?
Проблема кажется схожей с ошибками в Linux с gcc у Ryzen CPU, т.к. никто из Linux так и не взялся за получение доп. документации (c NDA?) на проц от AMD, кроме Microsoft Windows (в ней расписанных на многих сайтах ошибок с Ryzen нет). :) Но описанное здесь странное поведение gcc, проявляется на любом CPU в среде WSL c программами от ubuntu...
 
Последнее редактирование:
Сверху Снизу