From dbd95ca60429bcad91d2954c720125b5da473cf3 Mon Sep 17 00:00:00 2001 From: GuangJie1 Date: Thu, 26 Jun 2025 16:55:02 +0800 Subject: [PATCH] add memtester readme --- Others/memtester/README.md | 75 ++++++++++++++++++ Others/memtester/doc/image-info.yml | 69 ++++++++++++++++ Others/memtester/doc/picture/logo.png | Bin 0 -> 2824 bytes Others/netdata/2.5.0/24.03-lts-sp1/Dockerfile | 8 +- Others/netdata/README.md | 49 ++++++++++++ Others/netdata/doc/image-info.yml | 49 ++++++++++++ Others/netdata/doc/picture/logo.png | Bin 0 -> 7746 bytes 7 files changed, 249 insertions(+), 1 deletion(-) create mode 100644 Others/memtester/README.md create mode 100644 Others/memtester/doc/image-info.yml create mode 100644 Others/memtester/doc/picture/logo.png create mode 100644 Others/netdata/README.md create mode 100644 Others/netdata/doc/image-info.yml create mode 100644 Others/netdata/doc/picture/logo.png diff --git a/Others/memtester/README.md b/Others/memtester/README.md new file mode 100644 index 00000000..b08e1b1c --- /dev/null +++ b/Others/memtester/README.md @@ -0,0 +1,75 @@ +# Quick reference + +- The official memtester docker image. + +- Maintained by: [openEuler CloudNative SIG](https://gitee.com/openeuler/cloudnative). + +- Where to get help: [openEuler CloudNative SIG](https://gitee.com/openeuler/cloudnative), [openEuler](https://gitee.com/openeuler/community). + +# memtester | openEuler +Current memtester docker images are built on the [openEuler](https://repo.openeuler.org/). This repository is free to use and exempted from per-user rate limits. + +memtester is an effective userspace tester for stress-testing the memory subsystem. + +Learn more on [memtester website](https://linux.die.net/man/8/memtester). + +# Supported tags and respective Dockerfile links +The tag of each memtester docker image is consist of the version of memtester and the version of basic image. The details are as follows + +| Tags | Currently | Architectures| +|------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------|--| +| [4.7.1-oe2403sp1](https://gitee.com/openeuler/openeuler-docker-images/blob/master/Others/memtester/4.7.1/24.03-lts-sp1/Dockerfile) | memtester 4.7.1 on openEuler 24.03-LTS-SP1 | amd64, arm64 | + +# Usage +In this usage, users can select the corresponding `{Tag}` based on their requirements. + +- Pull the `openeuler/memtester` image from docker + + ``` + docker pull openeuler/memtester:{Tag} + ``` + +- Basic Command Syntax + + ``` + memtester + ``` + + * memory_size: Amount of RAM to test (e.g., 100M, 1G) + * iterations: Number of test cycles (default: 1)。 + +- Example: Test 100MB RAM + + Run the following command to test 100MB of memory with 1 full pass: + ``` + memtester 100M 1 + ``` + + Expected Output: + ``` + ...... + Loop 1/1: + Stuck Address : ok + Random Value : ok + Compare XOR : ok + Compare SUB : ok + Compare MUL : ok + Compare DIV : ok + Compare OR : ok + Compare AND : ok + Sequential Increment: ok + Solid Bits : ok + Block Sequential : ok + Checkerboard : ok + Bit Spread : ok + Bit Flip : ok + Walking Ones : ok + Walking Zeroes : ok + 8-bit Writes : ok + 16-bit Writes : ok + + Done. + ``` + +# Question and answering +If you have any questions or want to use some special features, please submit an issue or a pull request on [openeuler-docker-images](https://gitee.com/openeuler/openeuler-docker-images). \ No newline at end of file diff --git a/Others/memtester/doc/image-info.yml b/Others/memtester/doc/image-info.yml new file mode 100644 index 00000000..64f799ef --- /dev/null +++ b/Others/memtester/doc/image-info.yml @@ -0,0 +1,69 @@ +name: memtester +category: others +description: memtester 是一个开源的内存测试工具,用于检测物理内存(RAM)的稳定性,可发现硬件错误(如位翻转、写入失败等)。 +environment: | + 本应用在Docker环境中运行,安装Docker执行如下命令 + ``` + yum install -y docker + ``` +tags: | + memtester镜像的Tag由其版本信息和基础镜像版本信息组成,详细内容如下 + + | Tag | Currently | Architectures | + |----------|-------------|------------------| + | [4.7.1-oe2403sp1](https://gitee.com/openeuler/openeuler-docker-images/blob/master/Others/memtester/4.7.1/24.03-lts-sp1/Dockerfile) | memtester 4.7.1 on openEuler 24.03-LTS-SP1 | amd64, arm64 | + +download: | + 拉取镜像到本地 + ``` + docker pull openeuler/memtester:{Tag} + ``` + +usage: | + - 基本命令语法 + + ``` + memtester + ``` + * memory_size:要测试的内存容量(例如:100M,1G) + * iterations:测试循环次数(默认:1) + + - 示例:测试100MB内存 + + 运行以下命令对100MB内存进行完整测试(1次完整测试循环): + ``` + memtester 100M 1 + ``` + + 输出内容: + ``` + ...... + Loop 1/1: + Stuck Address : ok + Random Value : ok + Compare XOR : ok + Compare SUB : ok + Compare MUL : ok + Compare DIV : ok + Compare OR : ok + Compare AND : ok + Sequential Increment: ok + Solid Bits : ok + Block Sequential : ok + Checkerboard : ok + Bit Spread : ok + Bit Flip : ok + Walking Ones : ok + Walking Zeroes : ok + 8-bit Writes : ok + 16-bit Writes : ok + + Done. + ``` + + +license: GPL-2.0 license +similar_packages: + - Sysbench: Sysbench 是一个开源的、多线程的性能测试工具,主要用于对 CPU、内存、磁盘 I/O、线程、数据库(如 MySQL/PostgreSQL) 等系统资源进行基准测试(benchmark)。 +dependency: + - glibc \ No newline at end of file diff --git a/Others/memtester/doc/picture/logo.png b/Others/memtester/doc/picture/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..157aa6548c5c4686447f08fa48490f38c762e71c GIT binary patch literal 2824 zcmb_ec{mj68Xs#0C0h$p(Im`R4o73pGQ${SUj`#0X^N3!FxDb#mWjh~<}mhU$TEr| zi42Oeg+{15$ugPAHla{=y7#&Fx#!RGJokH^?|Z-Z{odvGd!P4@FWte;>Y%8cC;$LB zh_JSF0s#1>c=u)z0p1y08)?Q9d|^&j=77dw1r|>c3^YUWj5MOy-X$TPuH#_q0^`ZQ zyDEg>FL*JMcqcn&fM(!Ogc7>;QS$5$Ba*buXZPGFOBVV!aCh@ij>bAM`=9tNN3Ps1r7H^mU08qd z@4lJayMBEFYx)Xr;DeXjF@$15HjTDh>G(bJ(s9y`y1tMpzKwo*hmW-5b^PHJ>soq@ zkqUU-ogWDh0`ti<3p#X5UEup4#k2<>jo~N0b`Ctaz23QSLc(BZBR10iZ8o#>|EHsMF~^A zq#MHkyVg)X`3h%N9J)-=Om?7r%XO=T7gMwa`W1~SM9j_`aA*sE(fr|Um*RlF$ZuLk z0mM_a8o~j|w{7c3#HbPD`aN2mZ6gpfO{z>kG@)Qpc`X>petp|#ImF|cv-(6Va2gzy63_C({@sM~k7=u(eg%qZ%kOD|-cf~fX{QeLUf{@H z2`=YkW;-R!L@8KZ{IlzYlL0Hl?uKH@(ft{W2gN`BD)4h!(*X2hl)KCJp?7BsR-oB| zYJ0{!xc-9y{7?PUTS2(cg{Vi1L+uWKSQRBbDZG2dv0qq5%~avHROb%ojVbmzfTr|l zK$JCjR&RbNWiO~NC+mJDo(Voy7K8g8Njac6_2od{VS5LkP+kurb9~EuX!Pg>aGvV< zq3Vy%G}O2C?$6q!#)Uqd{atI^B2TX6tLUQj@lAi}rJPiB1aWL0x8F|B(@31`9}f3V z|JoM%k$OF>Zg6D;w8f$w-%ya%pCG;9Fy|}KW|tS<4EfLvAW?oyYNtUs646^@TQk1c zMYi`P4!T#9SF%9kgi<#f76!bJz%I)4nl&ialNeMhD7fKabT7E9$zUl+N7T;K?FCnN zmW+Vcq3~ih6C{5Xk)nW$b;znW5N7M1aF%pXVJR^4n11Xv5~F^=Pl#pJmXuDhZx0Vd z&<4c~=(bg<30G9gTWgQZ*u}<&ziu7Fa*w&T3ck{@UHLd>OdN5^Y1j7T1vjNiR-T-e zT8!`WTtF^?WMNh)E9jvbBc_qs>hcS5EPV8V$k-AUohS^P*CZ9pIZ>^hY4mtwHh@9A z44nBy_0iAD&6YO5yIGuF7$Ou~nTdD@+>n`S|7CDoukpc|CQZ)ZEB-3ll&Q8ZW4)pqSXpy+0_D>tI6V_;lA(Lh z4RIv!xqBXj=0lXQ+YNJI+nK&nPEafn$Q#JDj;QfE;HOcLt+pnq?EgBrz44PoPx1EjnGt;8t<*X9F)v zm0E9J&F`95C`R>b){ZN;_`IU4y^E$-wRjuLxVd7Tap}xp0E$D&>qB83T3-YYW6x z9z%I1e#*E*XDd(%U%lqc-CS4_+%>A@0r}b8=C3!Nnq{78FpRSAn^1zX|$~EDBtKu7P)Q7$H zT5PhuEdPhXwa^kmlDe5QQby<9X5Le^w{0RicP<^(864HeN4sD1boE#BDql+)RaRu$ ztSOV$6qCCGqu0vJ``lfqG{w1dchF*bz7XaUV2lMPt(sJ7HhXYEfWF%GkyBOci+g88;<6E)`D*nOZbV!j z?4Hnymr}U${RmC71IyeCUdYNUn!&u`-6qQ~0r_t~jb*j)nj43#9Gk9xnS5xJmC#1A z4xx2^GU=Oh^>(8+@Hl0l#ikxwM*seg@39PJQY2_c8VS9Q^3;CR6Pu=f#5+UhyY6I# zJT5OMgjWf6^Wmjs=!U(Trt|qNba~5^tys#3t-Ni{;vH9y>w5on4B6CNj(0cAtbJrV z$M6T*L{5>vx~nGt%FKEA=VqBkThd+4r)po?CMx8EAvtfb!=q0$I02&hB&vK2IOpx0 z2fFe+`ZI2jrSzBNe<$vOFVqaiHLj9YH3rvlo8M0Yz)Z5x}d9ZY?>um8~T*x z=e5*m5E(bG3T6hi7u9kmgG<+T8Tl!^L7{;*B(@d`K2Vw%h$v=<;A3zOc}ZO{V$ecw z#z1B36>9wnsfBKI^Mr@$mbI6+V>HIBcf?o%c#tbN$3}o!lxZ#qdyH)!WS>7by z$MZO1sF7x;$ZodHo|5g(Iopo+@<_VV_AVl}3I6^RBP6h36KaC%td8JSZw0+1!IHu3 z8XUVtaQ8&LGd(Cxl0drAY`UdAxj`ng#uq~ahLlg(B*569_y!@ zMHZI1-FC>U_O(h8=NI7L+88ODz`0vEb8~$Za0*Vu?InQ{MXCd58?%e@sILWLAU!6= zC$uC^e>_5!r9EH}C@)QZz@}4_i>p;iQQV#FFsMl_R-<73vhEMWq4{sDp1%E6{zU9} z(M@2tv /opt/netdata-kickstart.sh WORKDIR /opt RUN chmod +x ./netdata-kickstart.sh -CMD ["./netdata-kickstart.sh", "--non-interactive"] \ No newline at end of file +RUN ./netdata-kickstart.sh --non-interactive --no-updates + +CMD ["./netdata/bin/netdata", "--help"] \ No newline at end of file diff --git a/Others/netdata/README.md b/Others/netdata/README.md new file mode 100644 index 00000000..67ab83be --- /dev/null +++ b/Others/netdata/README.md @@ -0,0 +1,49 @@ +# Quick reference + +- The official Netdata docker image. + +- Maintained by: [openEuler CloudNative SIG](https://gitee.com/openeuler/cloudnative). + +- Where to get help: [openEuler CloudNative SIG](https://gitee.com/openeuler/cloudnative), [openEuler](https://gitee.com/openeuler/community). + +# Netdata | openEuler +Current Netdata docker images are built on the [openEuler](https://repo.openeuler.org/). This repository is free to use and exempted from per-user rate limits. + +Netdata is an open-source, real-time infrastructure monitoring platform. Monitor, detect, and act across your entire infrastructure. + +Learn more on [netdata website](https://netdata.org/docs/latest/introduction/index.html). + +# Supported tags and respective Dockerfile links +The tag of each netdata docker image is consist of the version of netdata and the version of basic image. The details are as follows + +| Tags | Currently | Architectures| +|----------------------------------------------------------------------------------------------------------------------------------|------------------------------------------|--| +| [2.5.0-oe2403sp1](https://gitee.com/openeuler/openeuler-docker-images/blob/master/Others/netdata/2.5.0/24.03-lts-sp1/Dockerfile) | Netdata 2.5.0 on openEuler 24.03-LTS-SP1 | amd64, arm64 | + +# Usage +In this usage, users can select the corresponding `{Tag}` based on their requirements. + +- Pull the `openeuler/netdata` image from docker + + ``` + docker pull openeuler/netdata:{Tag} + ``` + +- Run the Netdata process + + Execute the following command to start Netdata manually. + ``` + netdata/bin/netdata + ``` + This starts the Netdata monitoring agent in the foreground, you can run it in the background using `&` if needed. + +- Access the web dashboard + + Once Netdata is running, you can access web dashboard. + ``` + http://localhost:19999 + ``` + This will bring up the Netdata real-time monitoring dashboard, where you can view system metrics such as CPU, memory, disk I/O, network traffic, and more. + +# Question and answering +If you have any questions or want to use some special features, please submit an issue or a pull request on [openeuler-docker-images](https://gitee.com/openeuler/openeuler-docker-images). \ No newline at end of file diff --git a/Others/netdata/doc/image-info.yml b/Others/netdata/doc/image-info.yml new file mode 100644 index 00000000..33e08927 --- /dev/null +++ b/Others/netdata/doc/image-info.yml @@ -0,0 +1,49 @@ +name: netdata +category: others +description: Netdata 是一个高性能、实时系统监控和性能分析工具。 +environment: | + 本应用在Docker环境中运行,安装Docker执行如下命令 + ``` + yum install -y docker + ``` +tags: | + netdata镜像的Tag由其版本信息和基础镜像版本信息组成,详细内容如下 + + | Tag | Currently | Architectures | + |----------|-------------|------------------| + | [2.5.0-oe2403sp1](https://gitee.com/openeuler/openeuler-docker-images/blob/master/Others/netdata/2.5.0/24.03-lts-sp1/Dockerfile) | Netdata 2.5.0 on openEuler 24.03-LTS-SP1 | amd64, arm64 | + +download: | + 拉取镜像到本地 + ``` + docker pull openeuler/netdata:{Tag} + ``` + +usage: | + - 运行 Netdata 进程 + + 执行以下命令手动启动 Netdata: + ``` + netdata/bin/netdata + ``` + 这会以前台方式启动 Netdata 监控代理进程。如果你希望它在后台运行,可以在命令后添加 &。 + + - 访问 Web UI + + Netdata 运行后,可以访问它的 Web UI: + ``` + http://localhost:19999 + ``` + 你将看到 Netdata 实时监控UI,可以查看 CPU、内存、磁盘 I/O、网络流量等系统指标。 + + +license: GPL-3.0 license +similar_packages: + - Prometheus: Prometheus 是一个开源的系统监控和告警工具,采集和存储时间序列数据,支持强大的查询语言 PromQL,用于性能监控、系统分析和自动报警。 +dependency: + - libuuid + - libcurl + - libmnl + - libuv + - openssl + - node.js \ No newline at end of file diff --git a/Others/netdata/doc/picture/logo.png b/Others/netdata/doc/picture/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d4c6d2b7c0218d5700613579ea106e0ded55ced2 GIT binary patch literal 7746 zcma)=Wl$7gw}6-KknZm8kZzv902UgmM&?E`KzslIK>9D0(EbxDdPds3{}5VB zqEE5Ii(d~K&VN06#@c<>y)t~lU47QuLEh_!OzZ7d+~REgpvD=vBPv*35AYWeRfanF z-|}|eV(Df}j@yw&+`??X6!<9;avpAV%jgI3O`SHk4vd+HkM-Xgq=|OMkNVg}-JI9Y zAXh(-tOt(;Q+WfFk0+B^Tdo@lg9z!XVCAzR(8uyfI7YD`A)x8jG4U8D?Q4Bq4Taj_ zn!_KZh}~Ug#`eAMfKT8NY@j6O@Z(gGeh^)ifcsLI%#v1%RUt#VrsHWR9gOu z)OKlmrs%YHJcW=~)Ny)EORrd_eX7xhtp?pvEe7{*x6GW@O0k1qOi266%~v(Ga=Q1= z%y@H{vL%6-a26F!{ee-gCc{}p<2wpk7`8Bu+JTv+*Pr-gdr`Q9E_h7zeLtM#vUOmY zx)|B)DmO&!f7$cs`Uf~#Prn?U=-oaf88Q`c#-O;?Rav6i^b(C6QY{K~V*D5_(6VV` z9;DVCS(<@#?|Uo0FA0lN#=(x>Vr5f5i^#MQ70I%*CVgL0@m)$-j1of<*0hhM$h`|y zd$X^M-QQ2WEgp-%t~mRWlrZhH6qNQ^X1Pc%COe`hVTY5xw&g5Hk8^18GO>F5m6XxW zL7Ik&kE{>Ipqq2?K|xCFDg5UHpqyY4PU+;}KVFD~rbtcM9+m+XSqTim+!l|)9uOpX zQxf!VY3z`CP@ogXn4|>|B5{X?dj^R3|JwpHa#%PhOo@xx?2mRvBSMao5tUr|I{$L2 zq6Y5|4X)O!wnk$|Ic8xi_KR>3Fr5sj3X*CXSd)e}T)O3Z?EZGT`uFW8i)0^RZK28u z3&6UgL3x=5ggLlnorM4j5BdT{Ca}CxBBB9X3LBf^!FXo@xhlO65Kd2thMUyW)@r0|6>;56Ti#^Ej!vIWn@^L2Ll z=|4_JN4x_Y)yfm)T{BY^Je#bRBh$y;m>^8}K5or5d{bt>Bb}1)$4%r=VX$%RV;kyPr2*@9Z5Uo*lm~t|{ zDFbl(1NmYs1hAJuP~e%vsOo%1PvyD7vy$%)A6xbeHC673nY`r3fjr60KIo9}U8qBQ z!gp4Zm=lGNhEOG^kLtEPGOsR%_Q<^n5(FW{<#Cc1E&{n3cAhMKN%-Xs7Cc!XL9FE{ zCa;YtAeVQSDY4NW!6|Ao;JIFR!WV7y0g>^4u(m2+dpGz> zC6Gnz{7ntn{EARMjs)CDSCI7026`xk^u0k18Qvo>4`)#(c$_R#=kHE^qwGuff}FVvSfZW`YMz1 z9V|JScE}hkPb16BLGAyW9E+?I9mXrutIP%($NdypsZRV8&)+|}IMuab{Nrq;BiXT+?b~D=sEXbH(#bgo&n;b2YpX<*aB63F-iUU1dvG}akDG#;JJ5djA6#a`{7DyQL5pu#b zu-2cWs>l$rqW)*iA-SFwf4eAOG(?Y4%R(l z0=p^u-a!`@glb&Q3&~R04%jjXxQ(s3piw5L=;iKTXCg=q&%(C^6$Fx3?OXY#{*;Cr zeOl9ZdPR{forTvSwk8P6=Iv68BME-lh85YZdHy54bjG4mus|pM0D9;gI8!-7^)31wJfG5(Q`L{FO!gGIY<%FC>iO_9JQx+;xJ0PpGV*C_I2 zH5ClxIv&x~f3k*)Tk!_`l`|SHb7KBT2i_AdA&(npB9zi8xina8IgG~vbKyVo_7-6F zd}%ZK^Tb~ftAUksQANjdxkrOme?B>*7y}X_bfXxG0Et>^(Hf{@^qfyFJ

4o@$9n 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 literal 0 HcmV?d00001 -- Gitee