tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: Threaded file system benchmark



Ryo ONODERA <ryo_on%yk.rim.or.jp@localhost> wrote:
> ...
> 
> --- a/gettime.c
> +++ b/gettime.c
> @@ -483,18 +483,30 @@ static void *clock_thread_fn(void *data)
>  {
>  	struct clock_thread *t = data;
>  	struct clock_entry *c;
> +#if defined(__NetBSD__)
> +	os_cpu_mask_t *cpu_mask = cpuset_create();
> +#else
>  	os_cpu_mask_t cpu_mask;
> +#endif

You can always use a pointer, e.g.:

#if defined(__NetBSD__)
	os_cpu_mask_t *cpu_mask = cpuset_create();
#else
	os_cpu_mask_t cpu_mask_store;
	os_cpu_mask_t *cpu_mask = &cpu_mask_store;
#endif

This will save some #ifdef __NetBSD__ elsewhere.

> --- a/hash.h
> +++ b/hash.h
> @@ -18,6 +18,10 @@
>   * machines where multiplications are slow.
>   */
>  
> +#if !defined(BITS_PER_LONG)
> +#define	BITS_PER_LONG __SIZEOF_LONG__*8
> +#endif

I did not look how exactly is this used, but it is a good idea to use
brackets around the expression when dealing with macros.  Just prevents
from any future bugs.

> +static inline int fio_setaffinity(int tid, os_cpu_mask_t *cpumask)
> +{
> +	return _sched_getaffinity(getpid(), tid, cpuset_size(cpumask), cpumask);
> +}

I suppose you meant _sched_setaffinity() here?  Well, that is your bug.
Also, _sched_{get,set}affinity() are internal calls which should not be
used as a public API.  Instead, pthread_{get,set}affinity_np() should
be used.  See affinity(3) man page for the details.

> --- a/parse.c
> +++ b/parse.c
> @@ -152,7 +152,7 @@ static unsigned long long get_mult_time(const char
> *str, int len, 
>  	c = strdup(p);
>  	for (int i = 0; i < strlen(c); i++)
> -		c[i] = tolower(c[i]);
> +		c[i] = tolower((int)c[i]);

The value should be type casted to unsigned char rather than int.
See CAVEATS section of the ctype(3) man page for the explanation.

-- 
Mindaugas


Home | Main Index | Thread Index | Old Index