[PATCH v23 11/15] log: add timestamp option

fengchengwen fengchengwen at huawei.com
Thu Sep 19 03:20:45 CEST 2024


On 2024/9/18 23:05, Stephen Hemminger wrote:
> On Wed, 18 Sep 2024 15:37:49 +0800
> fengchengwen <fengchengwen at huawei.com> wrote:
> 
>> ...
>>
>>> +
>>> +static enum {
>>> +	LOG_TIMESTAMP_NONE = 0,
>>> +	LOG_TIMESTAMP_TIME,	/* time since start */
>>> +	LOG_TIMESTAMP_DELTA,	/* time since last message */
>>> +	LOG_TIMESTAMP_RELTIME,  /* relative time since last message */
>>> +	LOG_TIMESTAMP_CTIME,	/* Unix standard time format */
>>> +	LOG_TIMESTAMP_ISO,	/* ISO8601 time format */  
>>
>> Some of the impl should consider multiple-thread safety.
>>
>> And for multiple-process, how about the secondary-processes align the main-process.
> 
> 
> As much as possible, they are thread safe, that is why locatime_r is used.
> Of course if multiple threads are printing it is possible that time stamps
> could be out of order.  I.e CPU A got timestamp and is formatting message,
> and CPU B got timestamp is formatting message. The formatting might take longer for A.

Yes, the localtime_r is thread safe, but like delta, multi thread will both read and update
global variable log_time.previous with any sync, this may lead problem.
static struct {
	struct timespec started;   /* when log was initialized */
	struct timespec previous;  /* when last msg was printed */
} log_time;

e.g.
1, the previous tv_sec = 1000, tv_nsec = 90000;
2, thread A invoke log, and current tv_sec = 2000, tv_nsec = 10000; it will update the previous
3, thread B also invoke log, and current tv_sec = 2000, tv_nsec = 10001, but it read previous is tv_sec = 2000, tv_nsec = 90000
   and the delta will invalid.


More information about the dev mailing list