| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
Sorry, something went wrong.
There was a problem hiding this comment.
Looks pretty good so far … nice :)
Sorry, something went wrong.
There was a problem hiding this comment.
Can you use REPLACEME as the placeholder here? It gets picked up by release tooling automatically
Sorry, something went wrong.
There was a problem hiding this comment.
Done.
Sorry, something went wrong.
There was a problem hiding this comment.
Can you use args[0].As<Int32>()->Value()? ->Int32Value() is an operation that potentially performs a type conversion, but that’s unnecessarily complex, since we already know that it’s an Int32
Sorry, something went wrong.
There was a problem hiding this comment.
Sounds great and it's done, thanks!
Sorry, something went wrong.
There was a problem hiding this comment.
Can you inline typeof inc here? The engine is generally better at recognizing that pattern and can eliminate the temporary string you’d be creating here
Sorry, something went wrong.
There was a problem hiding this comment.
Thanks for the deep insights. It is fixed.
Sorry, something went wrong.
There was a problem hiding this comment.
I think it’s a bit confusing to mix validation and the actual calls to _nice … could you separate them?
Sorry, something went wrong.
There was a problem hiding this comment.
Split them up.:)
Sorry, something went wrong.
|
Also: Your author name in this commit is given as “zokker13”. Is that intended or do you prefer to be listed (changelog, git log, AUTHORS file) with some other name? People typically prefer their full name, but ultimately it’s up to you. |
Sorry, something went wrong.
|
@addaleax Thanks for the review and the lightning fast response. Added your requests. Hope that "fixup" -commit is appropriate. |
Sorry, something went wrong.
There was a problem hiding this comment.
Great, thanks!
Sorry, something went wrong.
There was a problem hiding this comment.
you can just combine this with the below
function validateInc(inc) {
if (typeof inc === 'number') {
validateInt32(inc, 'nice');
} else if (inc !== undefined) {
throw new ERR_INVALID_ARG_TYPE('nice', ['number', 'undefined'], inc);
}
}
Sorry, something went wrong.
There was a problem hiding this comment.
Nice catch, totally missed that!
Here it is: 655894e745de20829ff40ee330557da1305f9c7e
Sorry, something went wrong.
|
CI: https://ci.nodejs.org/job/node-test-pull-request/15747/ As a heads up, our rules will require this PR to stay open for 72 hours so people have a chance to weigh in, and you may have to update this one or two times more during that time. But as first PRs go, this is definitely a first-class example. :) |
Sorry, something went wrong.
There was a problem hiding this comment.
This is a sentence fragment. You can make it a complete sentence by removing Though,.
Sorry, something went wrong.
There was a problem hiding this comment.
For those not familiar with the 'nice' system, the two different uses of 'increase' here might be confusing. At the very least it would be a good idea to note that increasing the 'nice' value means lowering the process priority. This is hinted at in the paragraph above this one, but I still think using 'increase' back to back here could confuse some people.
Sorry, something went wrong.
There was a problem hiding this comment.
I kinda changed the entire thing: a099642629b36e908c5114227c4fd8e9c18cc12f
Sorry, something went wrong.
There was a problem hiding this comment.
Please remove **NOTE**:, the exclamation point, and use of you.
Maybe this?:
The nice value can be increased only. It can not be decreased.
...or...
The nice value can never be decreased except by the super user.
...or something like that.
Sorry, something went wrong.
There was a problem hiding this comment.
Changed in a way that is (hopefully) better readable: a099642629b36e908c5114227c4fd8e9c18cc12f
Sorry, something went wrong.
|
Hi, @zokker13! Welcome and thanks for the PR! I have two requests for the documentation you've added:
These (well, the second one) are noted in doc/STYLE_GUIDE.md. |
Sorry, something went wrong.
|
Feels notable enough that pinging @nodejs/tsc seems appropriate. Also pinging @nodejs/documentation for any other comments on the docs. |
Sorry, something went wrong.
There was a problem hiding this comment.
This sentence is confusing as Android is about as POSIX compliant as Linux is. It would be better to leave that part out and just say that the function is not available on Windows or Android.
Sorry, something went wrong.
There was a problem hiding this comment.
I added Android support for this PR: a099642629b36e908c5114227c4fd8e9c18cc12f
Sorry, something went wrong.
There was a problem hiding this comment.
We should include return value information here since this function always returns a value.
Sorry, something went wrong.
There was a problem hiding this comment.
Check. a099642629b36e908c5114227c4fd8e9c18cc12f
Sorry, something went wrong.
|
Is it not possible to somehow bridge nice() and Windows' priority API via libuv? Also, from what I'm reading, Android does support nice() (which is currently(?) just a wrapper around their own setpriority()). |
Sorry, something went wrong.
|
Does this work on non-linuxies? I also wonder if the underlying impl isn’t better suited for libuv. |
Sorry, something went wrong.
|
@mscdex Hey, @Fishrock123 Yes, it should work for various POSIX compliant OS'. There are subtle differences between them though. But those differences are limited to the range of the niceness. So perhaps a reference to the min/max niceness would be fitting and convenient to the user (or at least a documentation). |
Sorry, something went wrong.
|
[ I am just thinking aload here, please don't consider as a negative remark on the PR. ] are there any benchmarks that provide insights on scheduling behavior and its implications on the workload with default priority? I believe most of the UNIX schedulers have special optimizations for I/O workload, so wondering whether manual modification will influence the OS logic and thereby the overall performance positively or negatively. Also wondering about the characteristics of stream velocity / backpressure etc. under a cluster, child process, IPC toppologies when processes are running with manually preset scheduling priorities. If we don't have these info or cannot determine, it would be worthwhile considering writing caveats in the doc (or else we can get unwanted issues that complain about not getting desired througput after altering the nice etc.) on these lines: the overall efficiency of Node programs when catering to highly interactive workloads depend on peer end points resident in the host or otherwise. So altering the nice value of the process should be performed carefully, only after running your performance benchmark under full load and realizing any desired improvements. |
Sorry, something went wrong.
I imagine someone at some point will want the Windows equivalent in core because process.nice() exists for non-Windows. If we can find a way to support it from the get-go, that would be better. Maybe we don't call it nice() if we support Windows with the same function. Or perhaps we support it in some other way, via a namespace or something else.
@zokker13 https://android.googlesource.com/platform/bionic.git/+/master/libc/upstream-netbsd/lib/libc/gen/nice.c |
Sorry, something went wrong.
|
@gireeshpunathil I don’t necessarily think it’s our job to talk about these things in the docs for nice(). I don’t know if you have increasing or decreasing niceness in mind, but the former will be more common (simply because it doesn’t require privileges), and you generally only do that if you don’t really care about performance all that much. |
Sorry, something went wrong.
|
ok, sure! |
Sorry, something went wrong.
There was a problem hiding this comment.
I don't think having this is necessary, especially since we already document Windows is not supported below this example.
Sorry, something went wrong.
There was a problem hiding this comment.
Perhaps change this so the platform check is only run once when this file is evaluated, since the process platform will not change during runtime. Example:
if (process.platform === 'win32') {
process.nice = function nice(inc) {
throw new ERR_METHOD_NOT_IMPLEMENTED('nice()');
};
} else {
process.nice = function nice(inc) {
validateInc(inc);
return _nice(inc);
};
}or something similar
Sorry, something went wrong.
There was a problem hiding this comment.
This is no longer valid since we're now throwing.
However, I feel like we should just call common.skip() with an appropriate message to make it obvious that we're not testing the real implementation.
Sorry, something went wrong.
There was a problem hiding this comment.
How about also testing that passing '0' or undefined results in a finite integer being returned?
Sorry, something went wrong.
There was a problem hiding this comment.
Also, we might want to test that something like process.nice(1) works as expected.
Sorry, something went wrong.
|
Mh.. okay guys, I thought about having a more neutral function (say getpriority/setpritority) in favor of the nice function. The reason is that it doesn't really have a future on Windows and when we later add a functionality to set the priority cross-platform, nobody would use the posix function anyway. So I'd like to close this for now, go visit the libuv fellows and come back to implement a neutral call here. |
Sorry, something went wrong.
|
@zokker13 I think this PR is still in pretty good shape (I personally disagree about being inconsistent with other functions re: Windows, but, oh well). Can we mark this PR as in progress just so it doesn’t get merged, you try to work up something for libuv, and if that doesn’t pan out, we can continue where we left here? |
Sorry, something went wrong.
The nice function allows us to fine-tune the process to meet desired scheduling behavior. If our process needs less schedule time because it is a long-running one, we can increase the nice value and cause the scheduler to select the process not so often.
|
@addaleax Ya, that sounds fine, thanks. I think the discussion alone is a good reason to go that route. Rebased just to be sure. Perhaps @cjihrig would be so kind to guide me to the correct libuv location? The node structure is more familiar to me but libuv seems a bit mixed. |
Sorry, something went wrong.
You'd probably want to target https://github.com/libuv/libuv/blob/v1.x/src/unix/core.c and https://github.com/libuv/libuv/blob/v1.x/src/win/util.c. |
Sorry, something went wrong.
Refs: nodejs/node#21675 PR-URL: libuv#1945 Reviewed-By: Santiago Gimeno <santiago.gimeno@gmail.com> Reviewed-By: Richard Lau <riclau@uk.ibm.com>
Refs: nodejs/node#21675 PR-URL: #1945 Reviewed-By: Santiago Gimeno <santiago.gimeno@gmail.com> Reviewed-By: Richard Lau <riclau@uk.ibm.com>
Notable changes:
- Restores compatibility with the old IPC protocol.
- Adds uv_open_osfhandle().
- Adds uv_os_{get,set}priority().
PR-URL: nodejs#22365
Fixes: nodejs#21671
Fixes: nodejs#15433
Refs: nodejs#21675
Refs: nodejs/node-addon-api#304
Refs: nodejs/abi-stable-node#318
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Notable changes:
- Restores compatibility with the old IPC protocol.
- Adds uv_open_osfhandle().
- Adds uv_os_{get,set}priority().
PR-URL: #22365
Fixes: #21671
Fixes: #15433
Refs: #21675
Refs: nodejs/node-addon-api#304
Refs: nodejs/abi-stable-node#318
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Notable changes:
- Restores compatibility with the old IPC protocol.
- Adds uv_open_osfhandle().
- Adds uv_os_{get,set}priority().
PR-URL: #22365
Fixes: #21671
Fixes: #15433
Refs: #21675
Refs: nodejs/node-addon-api#304
Refs: nodejs/abi-stable-node#318
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
|
Superseded by the now-merged #22407 |
Sorry, something went wrong.
Notable changes:
- Restores compatibility with the old IPC protocol.
- Adds uv_open_osfhandle().
- Adds uv_os_{get,set}priority().
PR-URL: nodejs#22365
Fixes: nodejs#21671
Fixes: nodejs#15433
Refs: nodejs#21675
Refs: nodejs/node-addon-api#304
Refs: nodejs/abi-stable-node#318
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Notable changes:
- Restores compatibility with the old IPC protocol.
- Adds uv_open_osfhandle().
- Adds uv_os_{get,set}priority().
Backport-PR-URL: #24103
PR-URL: #22365
Fixes: #21671
Fixes: #15433
Refs: #21675
Refs: nodejs/node-addon-api#304
Refs: nodejs/abi-stable-node#318
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
| Back | FazBrowse Home | New Git URL |
The nice function allows us to fine-tune the process to meet desired
scheduling behavior. If our process needs less schedule time because
it is a long-running one, we can increase the nice value and cause
the scheduler to select the process not so often.
If desired, here's the technical documentation: http://man7.org/linux/man-pages/man2/nice.2.html
Checklist