Jim Apple has posted comments on this change.

Change subject: IMPALA-3203: Part 1: Free list implementation
......................................................................


Patch Set 6:

(24 comments)

http://gerrit.cloudera.org:8080/#/c/6410/6/be/src/benchmarks/free-lists-benchmark.cc
File be/src/benchmarks/free-lists-benchmark.cc:

PS6, Line 48: per thread
It might be easier to read if it showed total throughput


PS6, Line 59: i7-4790
Do you have Hyperthreading on?


PS6, Line 61: 0 iters
It might help to explain what this is before these benchmarks


Line 257: 
elide this empty line


PS6, Line 288: MAX_LIST_ENTRIES
How was this chosen?


PS6, Line 303: *
&


Line 308:     lock_guard<SpinLock> l(free_list->first);
In the case where there is one list per thread, why bother with the lock?


Line 350:     int64_t op = uniform_int_distribution<int64_t>(0, 1)(rng);
const


Line 405:         for (int num_threads : {1, 2, 4, CpuInfo::num_cores()}) {
Is it worth trying 2*num_cores?


http://gerrit.cloudera.org:8080/#/c/6410/6/be/src/runtime/bufferpool/free-list-test.cc
File be/src/runtime/bufferpool/free-list-test.cc:

PS6, Line 18: c
also use <cstdint> in free-list.h or use <stdlib.h> here


PS6, Line 50: vector<BufferHandle>* buffers
You can just return this out parameter and the [N]RVO will make it efficient: 
http://en.cppreference.com/w/cpp/language/copy_elision


PS6, Line 58: void*
const void*


PS6, Line 103: various numbers
Only LIST_SIZE; no need for a loop


Line 112:       vector<void*> addrs = GetSortedAddrs(buffers);
const vector...


PS6, Line 118: small_list.Size() - LIST_SIZE
always 0?


PS6, Line 120: two
LIST_SIZE


http://gerrit.cloudera.org:8080/#/c/6410/6/be/src/runtime/bufferpool/free-list.h
File be/src/runtime/bufferpool/free-list.h:

PS6, Line 50: This helps to consolidate buffers within the address space
Sorry, I don't think I understand this - how does it help consolidate buffers?


PS6, Line 60: Get
Getters are often const methods. Maybe 'PopFreeBuffer'?


PS6, Line 60: bool
Can you just return nullptr on failure instead?


Line 69:   void AddFreeBuffer(BufferHandle buffer) {
If this will always be a moved argument, you can give it type BufferHandle&& 
buffer


PS6, Line 81: int
free_list_.size() is likely stored as a 64-bit integer type and is below 
returned as a 64-bit integer type.


PS6, Line 84: heap
minheap


PS6, Line 115: Limited to 'max_capacity_' capacity
Obsolete.


Line 117:   std::vector<BufferHandle> free_list_;
Since you need a double-ended priority queue, did you consider using a std::set?


-- 
To view, visit http://gerrit.cloudera.org:8080/6410
To unsubscribe, visit http://gerrit.cloudera.org:8080/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: Ia89acfa4efdecb96d3678443b4748932b4133b9b
Gerrit-PatchSet: 6
Gerrit-Project: Impala-ASF
Gerrit-Branch: master
Gerrit-Owner: Tim Armstrong <tarmstr...@cloudera.com>
Gerrit-Reviewer: Dan Hecht <dhe...@cloudera.com>
Gerrit-Reviewer: Jim Apple <jbapple-imp...@apache.org>
Gerrit-Reviewer: Tim Armstrong <tarmstr...@cloudera.com>
Gerrit-HasComments: Yes

Reply via email to