git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Ben Peart <peartben@gmail.com>
To: "Jeff King" <peff@peff.net>, "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
Cc: git@vger.kernel.org, gitster@pobox.com
Subject: Re: [PATCH v2 08/10] read-cache.c: remove #ifdef NO_PTHREADS
Date: Mon, 29 Oct 2018 13:23:36 -0400	[thread overview]
Message-ID: <61d354e9-dd40-14a8-29dc-d989dd5631af@gmail.com> (raw)
In-Reply-To: <20181029143033.GF17668@sigill.intra.peff.net>



On 10/29/2018 10:30 AM, Jeff King wrote:
> On Sat, Oct 27, 2018 at 07:30:06PM +0200, Nguyễn Thái Ngọc Duy wrote:
> 
>> -#ifndef NO_PTHREADS
>> -	nr_threads = git_config_get_index_threads();
>> +	if (HAVE_THREADS) {
>> +		nr_threads = git_config_get_index_threads();
>>   
>> -	/* TODO: does creating more threads than cores help? */
>> -	if (!nr_threads) {
>> -		nr_threads = istate->cache_nr / THREAD_COST;
>> -		cpus = online_cpus();
>> -		if (nr_threads > cpus)
>> -			nr_threads = cpus;
>> +		/* TODO: does creating more threads than cores help? */
>> +		if (!nr_threads) {
>> +			nr_threads = istate->cache_nr / THREAD_COST;
>> +			cpus = online_cpus();
>> +			if (nr_threads > cpus)
>> +				nr_threads = cpus;
>> +		}
>> +	} else {
>> +		nr_threads = 1;
>>   	}
> 
> I'd have thought we could just rely on online_cpus() returning 1 here to
> avoid having to ask "do we even have thread support?". But I guess that
> TODO comment implies that we might one day two 2 threads on a single
> CPU.
> 
> -Peff
> 

And here is the patch I created when testing out the idea of removing 
NO_PTHREADS.  It doesn't require any 'HAVE_THREADS' tests.



diff --git a/read-cache.c b/read-cache.c
index 1df5c16dbc..1f088799fc 100644
--- a/read-cache.c
+++ b/read-cache.c
@@ -1920,19 +1920,15 @@ struct index_entry_offset_table
         struct index_entry_offset entries[FLEX_ARRAY];
  };

-#ifndef NO_PTHREADS
  static struct index_entry_offset_table *read_ieot_extension(const char 
*mmap, size_t mmap_size, size_t offset
);
  static void write_ieot_extension(struct strbuf *sb, struct 
index_entry_offset_table *ieot);
-#endif

  static size_t read_eoie_extension(const char *mmap, size_t mmap_size);
  static void write_eoie_extension(struct strbuf *sb, git_hash_ctx 
*eoie_context, size_t offset);

  struct load_index_extensions
  {
-#ifndef NO_PTHREADS
         pthread_t pthread;
-#endif
         struct index_state *istate;
         const char *mmap;
         size_t mmap_size;
@@ -2010,8 +2006,6 @@ static unsigned long load_all_cache_entries(struct 
index_state *istate,
         return consumed;
  }

-#ifndef NO_PTHREADS
-
  /*
   * Mostly randomly chosen maximum thread counts: we
   * cap the parallelism to online_cpus() threads, and we want
@@ -2122,7 +2116,6 @@ static unsigned long 
load_cache_entries_threaded(struct index_state *istate, con


         return consumed;
  }
-#endif

  /* remember to discard_cache() before reading a different cache! */
  int do_read_index(struct index_state *istate, const char *path, int 
must_exist)
@@ -2135,10 +2128,8 @@ int do_read_index(struct index_state *istate, 
const char *path, int must_exist)

         size_t mmap_size;
         struct load_index_extensions p;
         size_t extension_offset = 0;
-#ifndef NO_PTHREADS
         int nr_threads, cpus;
         struct index_entry_offset_table *ieot = NULL;
-#endif

         if (istate->initialized)
                 return istate->cache_nr;
@@ -2181,16 +2172,12 @@ int do_read_index(struct index_state *istate, 
const char *path, int must_exist
)

         src_offset = sizeof(*hdr);

-#ifndef NO_PTHREADS
         nr_threads = git_config_get_index_threads();
-
-       /* TODO: does creating more threads than cores help? */
-       if (!nr_threads) {
+       if (!nr_threads)
                 nr_threads = istate->cache_nr / THREAD_COST;
-               cpus = online_cpus();
-               if (nr_threads > cpus)
-                       nr_threads = cpus;
-       }
+       cpus = online_cpus();
+       if (nr_threads > cpus)
+               nr_threads = cpus;

         if (nr_threads > 1) {
                 extension_offset = read_eoie_extension(mmap, mmap_size);
@@ -2219,22 +2206,16 @@ int do_read_index(struct index_state *istate, 
const char *path, int must_exist
)
         } else {
                 src_offset += load_all_cache_entries(istate, mmap, 
mmap_size, src_offset);
         }
-#else
-       src_offset += load_all_cache_entries(istate, mmap, mmap_size, 
src_offset);
-#endif

         istate->timestamp.sec = st.st_mtime;
         istate->timestamp.nsec = ST_MTIME_NSEC(st);

         /* if we created a thread, join it otherwise load the 
extensions on the primary thread */
-#ifndef NO_PTHREADS
         if (extension_offset) {
                 int ret = pthread_join(p.pthread, NULL);
                 if (ret)
                         die(_("unable to join load_index_extensions 
thread: %s"), strerror(ret));
-       }
-#endif
-       if (!extension_offset) {
+       } else {
                 p.src_offset = src_offset;
                 load_index_extensions(&p);
         }
@@ -2756,7 +2737,6 @@ static int do_write_index(struct index_state 
*istate, struct tempfile *tempfile,

         if (ce_write(&c, newfd, &hdr, sizeof(hdr)) < 0)
                 return -1;

-#ifndef NO_PTHREADS
         nr_threads = git_config_get_index_threads();
         if (nr_threads != 1) {
                 int ieot_blocks, cpus;
@@ -2787,7 +2767,6 @@ static int do_write_index(struct index_state 
*istate, struct tempfile *tempfile,

                         ieot_entries = DIV_ROUND_UP(entries, ieot_blocks);
                 }
         }
-#endif

         offset = lseek(newfd, 0, SEEK_CUR);
         if (offset < 0) {
@@ -2871,7 +2850,6 @@ static int do_write_index(struct index_state 
*istate, struct tempfile *tempfile,

          * strip_extensions parameter as we need it when loading the shared
          * index.
          */
-#ifndef NO_PTHREADS
         if (ieot) {
                 struct strbuf sb = STRBUF_INIT;

@@ -2883,7 +2861,6 @@ static int do_write_index(struct index_state 
*istate, struct tempfile *tempfile,

                 if (err)
                         return -1;
         }
-#endif

         if (!strip_extensions && istate->split_index) {
                 struct strbuf sb = STRBUF_INIT;
@@ -3469,7 +3446,6 @@ static void write_eoie_extension(struct strbuf 
*sb, git_hash_ctx *eoie_context,

         strbuf_add(sb, hash, the_hash_algo->rawsz);
  }

-#ifndef NO_PTHREADS
  #define IEOT_VERSION   (1)

  static struct index_entry_offset_table *read_ieot_extension(const char 
*mmap, size_t mmap_size, size_t offset
)
@@ -3542,4 +3518,3 @@ static void write_ieot_extension(struct strbuf 
*sb, struct index_entry_offset_ta

                strbuf_add(sb, &buffer, sizeof(uint32_t));
         }
  }
-#endif

  parent reply	other threads:[~2018-10-29 17:23 UTC|newest]

Thread overview: 66+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-27  7:09 [PATCH 00/10] Reduce #ifdef NO_PTHREADS Nguyễn Thái Ngọc Duy
2018-10-27  7:09 ` [PATCH 01/10] thread-utils: macros to unconditionally compile pthreads API Nguyễn Thái Ngọc Duy
2018-10-27  7:31   ` Jeff King
2018-10-27  7:40     ` Duy Nguyen
2018-10-27  8:15       ` Jeff King
2018-10-27 14:43         ` Duy Nguyen
2018-10-27  7:09 ` [PATCH 02/10] index-pack: remove #ifdef NO_PTHREADS Nguyễn Thái Ngọc Duy
2018-10-27  7:34   ` Jeff King
2018-10-27  7:09 ` [PATCH 03/10] name-hash.c: " Nguyễn Thái Ngọc Duy
2018-10-27  7:09 ` [PATCH 04/10] attr.c: " Nguyễn Thái Ngọc Duy
2018-10-27  7:09 ` [PATCH 05/10] send-pack.c: " Nguyễn Thái Ngọc Duy
2018-10-27  7:39   ` Jeff King
2018-10-27  7:09 ` [PATCH 06/10] grep: " Nguyễn Thái Ngọc Duy
2018-10-27  7:44   ` Jeff King
2018-10-29  2:16     ` Junio C Hamano
2018-10-29 14:25       ` Jeff King
2018-10-29 16:01         ` Duy Nguyen
2018-10-29 16:20           ` Jeff King
2018-10-30  1:27             ` Junio C Hamano
2018-10-27  7:10 ` [PATCH 07/10] preload-index.c: " Nguyễn Thái Ngọc Duy
2018-10-29 16:52   ` Ben Peart
2018-10-27  7:10 ` [PATCH 08/10] pack-objects: " Nguyễn Thái Ngọc Duy
2018-10-27  7:10 ` [PATCH 09/10] read-cache.c: " Nguyễn Thái Ngọc Duy
2018-10-29 17:05   ` Ben Peart
2018-10-29 17:21     ` Duy Nguyen
2018-10-29 17:58       ` Ben Peart
2018-10-30  1:44       ` Junio C Hamano
2018-10-27  7:10 ` [PATCH 10/10] Clean up pthread_create() error handling Nguyễn Thái Ngọc Duy
2018-10-27  7:24 ` [PATCH 00/10] Reduce #ifdef NO_PTHREADS Jeff King
2018-10-27  8:13 ` Jeff King
2018-10-27 17:07   ` Duy Nguyen
2018-10-27 17:29 ` [PATCH v2 " Nguyễn Thái Ngọc Duy
2018-10-27 17:29   ` [PATCH v2 01/10] thread-utils: macros to unconditionally compile pthreads API Nguyễn Thái Ngọc Duy
2018-10-27 17:30   ` [PATCH v2 02/10] index-pack: remove #ifdef NO_PTHREADS Nguyễn Thái Ngọc Duy
2018-10-27 17:30   ` [PATCH v2 03/10] name-hash.c: " Nguyễn Thái Ngọc Duy
2018-10-27 17:30   ` [PATCH v2 04/10] attr.c: " Nguyễn Thái Ngọc Duy
2018-10-27 17:30   ` [PATCH v2 05/10] grep: " Nguyễn Thái Ngọc Duy
2018-10-27 17:30   ` [PATCH v2 06/10] preload-index.c: " Nguyễn Thái Ngọc Duy
2018-10-29 17:21     ` Ben Peart
2018-10-29 17:26       ` Duy Nguyen
2018-10-29 18:05         ` Ben Peart
2018-10-29 20:11           ` Jeff King
2018-10-27 17:30   ` [PATCH v2 07/10] pack-objects: " Nguyễn Thái Ngọc Duy
2018-10-27 17:30   ` [PATCH v2 08/10] read-cache.c: " Nguyễn Thái Ngọc Duy
2018-10-29 14:30     ` Jeff King
2018-10-29 17:07       ` Ben Peart
2018-10-29 17:23       ` Ben Peart [this message]
2018-10-27 17:30   ` [PATCH v2 09/10] Clean up pthread_create() error handling Nguyễn Thái Ngọc Duy
2018-10-27 17:30   ` [PATCH v2 10/10] read-cache.c: initialize copy_len to shut up gcc 8 Nguyễn Thái Ngọc Duy
2018-10-29 14:31     ` Jeff King
2018-11-03  8:48   ` [PATCH v3 00/14] Reduce #ifdef NO_PTHREADS Nguyễn Thái Ngọc Duy
2018-11-03  8:48     ` [PATCH v3 01/14] thread-utils: macros to unconditionally compile pthreads API Nguyễn Thái Ngọc Duy
2018-11-03  8:48     ` [PATCH v3 02/14] run-command.h: include thread-utils.h instead of pthread.h Nguyễn Thái Ngọc Duy
2018-11-03  8:48     ` [PATCH v3 03/14] send-pack.c: move async's #ifdef NO_PTHREADS back to run-command.c Nguyễn Thái Ngọc Duy
2018-11-03  8:48     ` [PATCH v3 04/14] index-pack: remove #ifdef NO_PTHREADS Nguyễn Thái Ngọc Duy
2018-11-03  8:48     ` [PATCH v3 05/14] name-hash.c: " Nguyễn Thái Ngọc Duy
2018-11-03  8:48     ` [PATCH v3 06/14] attr.c: " Nguyễn Thái Ngọc Duy
2018-11-03  8:48     ` [PATCH v3 07/14] grep: " Nguyễn Thái Ngọc Duy
2018-11-03  8:48     ` [PATCH v3 08/14] grep: clean up num_threads handling Nguyễn Thái Ngọc Duy
2018-11-03  8:48     ` [PATCH v3 09/14] preload-index.c: remove #ifdef NO_PTHREADS Nguyễn Thái Ngọc Duy
2018-11-03  8:48     ` [PATCH v3 10/14] pack-objects: " Nguyễn Thái Ngọc Duy
2018-11-03  8:48     ` [PATCH v3 11/14] read-cache.c: " Nguyễn Thái Ngọc Duy
2018-11-03  8:48     ` [PATCH v3 12/14] read-cache.c: reduce branching based on HAVE_THREADS Nguyễn Thái Ngọc Duy
2018-11-03  8:48     ` [PATCH v3 13/14] read-cache.c: initialize copy_len to shut up gcc 8 Nguyễn Thái Ngọc Duy
2018-11-03  8:48     ` [PATCH v3 14/14] Clean up pthread_create() error handling Nguyễn Thái Ngọc Duy
2018-11-06  4:51     ` [PATCH v3 00/14] Reduce #ifdef NO_PTHREADS Junio C Hamano

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=61d354e9-dd40-14a8-29dc-d989dd5631af@gmail.com \
    --to=peartben@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=pclouds@gmail.com \
    --cc=peff@peff.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).