Files
张家岭 8fdda73c79 [ #1 ] 修复monitor_interval 溢出问题
修改:      README
	修改:      mnic.c
	修改:      version.h

Signed-off-by: 张家岭 <jlzhang@linx-info.com>

  (使用 "git reset HEAD^1 <file>..." 撤出暂存区)

  修改:      sys_nicmonitor/README
  修改:      sys_nicmonitor/mnic.c
  修改:      sys_nicmonitor/version.h
2019-09-05 11:50:00 +08:00
..
2019-08-28 16:11:30 +08:00

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
--V1.14 --
2015-12-29
修正了common.c中对日志消息队列的操作,其中包括:交换log_prepare与log_writing>队列指针的bug;以及在写入log_prepare队列时未检查已写入消息是否大于队列长度的b
ug。修正了log_path(即日志文件名)不会随时间改变的bug。
--V1.13 --
2015-12-23
修正在记录日志中检查目录时(在函数create_dir中),由于采用线程进行日志记录,多次调用get_nic_info可能会导致的将日志文件路径名变错的问题。在get_nic_info中判断log_path是否被初始化过,如过未初始化,则到共享内存中读取。否则,为初始化过,直接使用该值,并在create_dir中使用局部变量保存该值,在create_dir中使用操作该局部变量,而不去改变该全局变量的值。

-V1.12 --
2015-12-23
修正在程序开始时对IPC变量删除的错误函数调用。
添加配置项crazyping,当其不为零时,会在每次取网卡信息时进行ping操作。


--V1.11 --
2015-12-18
添加在程序开始时对IPC变量是否已存在的判断,如果已存在,则将其删除。
将宏TESTINTERVAL的定义去除,不然不会调用南瑞的库函数。

--V1.10 --
2015-12-11
修改IPC信号量的相关操作

1)通过对代码的分析发现:在使用信号量时存在错误。在使用进行PV原语操作时,进行了相反的操作,其中加锁操作应减少信号量的计数,而去锁应增加信号量的计数,但库中进行了相反的操作,对其进行了修改。即将get_sem中对信号量的操作改为-1,而在release_sem函数中对信号量的操作变为1(即+1)。同时在init_sem函数中将该信号量的值初始化为1。

2)信号量应由网卡监控程序sys_nicmonitor创建,而不应由用户程序创建,对其进行了相应的修改(在创建信号量时在flag中添加IPC_EXCL,并将用户程序引用信号量时的flag中去除IPC_CREATE)。

3)在对获取网卡信息函数get_nic_info中添加获取时间的操作后得知,其中对getpwdnam的调用会减慢函数的工作(该函数并非每次都减慢函数很多,多数在30~40ms左右,但在测试中曾达到2s左右)。对其修改为在sys_nicmonitor程序启动时,调用getpwdnam函数,并将得到的用户主目录名写入到一块共享内存中。当用户程序要获得该目录名时,则从该值从共享内存中读取出来,而不需要每次都通过getpwdnam来获取,故可以提高该函数的速度。


=-======update 2015-11-17
编译前,进入dep目录运行sh run.sh,安装编译依赖文件.

然后sh build.sh编译1.9版本的sys_nicmonitor#1.9-x86_64-Linx-Rocky4.2.pkg.tar.gz

调试模式下:
cd sys_nicmonitor-1.9
make clean
make 
make test
make runtest

版本号变更方法,更新sys_nicmonitor/version.h文件,需要同时修改//后面的和define中的,前者用于pkg包,后者用于sys_nicmonitor程序.
制作pkg包方法: sh build.sh



=========
编译前准备:
  编译前先安装dotconf软件包。
  libman.so拷贝到/usr/lib64/下
  pkgadd dotconf#1.0.13-1.pkg.tar.gz

编译说明:
  在Rocky 4.2上编译

  执行: sh build.sh
     将在当前的目录下生成安装包:
    sys_nicmonitor#1.9-x86_64-Linx-Rocky4.2.pkg.tar.gz

========
安装说明:
  1)安装,以root的用户执行安装命令:
    pkgadd sys_nicmonitor#1.9-x86_64-Linx-Rocky4.2.pkg.tar.gz
    如果之前已经安装,则可先卸载旧的然后再安装,或者通过更新方式安装
      卸载命令: pkgrm sys_nicmonitor
      更新方式安装命令:
      pkgadd -u sys_nicmonitor#1.9-x86_64-Linx-Rocky4.2.pkg.tar.gz

  2)查看安装是否成功
    pkginfo -i|grep sys_nicmonitor
    或者
    查看d5000用户的目录下lib/libnic_shm.so和bin/sys_nicmonitor的日期是否匹配

========

版本说明:
--V1.21 --
  2019-09-05
  1)修复问题:monitor_interval参数溢出导致cpu 100%
    问题描述:当monitor_interval参数配置为1000时,出现进程cpu占用100%的问题
    解决办法:增加对monitor_interval配置的检测和限制

--V1.9 --
  2013-08-12
  1)修复问题:占用内存快速累加,导致内存占用很大
    问题描述:日志线程资源退出时未回收,导致占用内存快速累加
    解决办法:修改为一个日志线程,并且线程退出时设置为自动回收。
              将日志写文件的地方放到common.c中,以便动态库和daemon程序使用一个。

  2)修复问题:日志文件名在家目录或者var目录下,未在规定位置
    问题描述:日志文件命名在一个单独的线程进行,导致日志线程和该线程对log_path存在同时访问的情况。
    导致在换天或者换月时,日志文件名变更一半时,日志写线程此时写日志,用未更新完成的
    log_path创建日志,导致日志文件不再规定的位置。
    解决办法:增加线程互斥锁pthread_mutex对log_path进行保护,修复该问题。


--V1.8.1--
  2013-06-05
  1)修改BUG:ping_gw函数当PING失败时没有尝试对余下的GW进行PING操作
  2)增加环境变量SYS_NIC_DEBUG用于调试流量抖动问题。

--V1.8 --
  2013-05-27
对系统高磁盘IO情况下,应用如果进行IO将可能会被阻塞。本版本为此作出调整。
cs-fes1上编译测试OK。

1) 去掉shm和sem的实体文件
#define SHM_PATH  "$D5000_HOME/share/sys_netcard_shm_path"
#define SEM_PATH  "$D5000_HOME/share/sys_netcard_sem_path"

用key=0x1d5200 代替 sem
用key=0x1d5010 代替 shm


2)去掉动态库中get_nic_info接口中,判断路径的opendir调用,采用实际路径
  上层应用每秒可能调用3次这个接口,每判断一个网卡都调用一次,判断都个网卡的状态时就调用多次。
  
  可改进:一次调用get_nic_info接口,可输入多个网卡,一次返回所有网卡状态信息。

3) record_log函数为日志函数,每次写一次,都重新打开一次文件。
  修改为线程模式,当记录日志时,不会被磁盘IO阻塞。

4) 安装目录为d5000用户的HOME目录下的lib和bin目录

----


V1.6与V1.7差异
共享内存路径修改:
由/home/d5000/someone/tmp/sys_netcard_shm_path 改为 /home/d5000/someone/share/sys_netcard_shm_path
信号量路径修改:
由/home/d5000/someone/tmp/sys_netcard_sem_path 改为 /home/d5000/someone/share/sys_netcard_sem_path

注意:在编译过程中,需要动态看libman.so,它存放在目录 tags/下面 ,在进行编译的时候需要将其拷贝到
/lib64/目录下,编译的基础环境是 Rocky 4.2 系统。

pkgmk命令的使用:
将源代码打包成name-version.tar.gz样式,编写Pkgfile文件。
使用命令:
	pkgmk -um #更新软件包的md5值
	pkgmk -kw #制作pkg安装包