perf: Drop redundant liveness probe in redis_sock_read_bulk_reply#2858
Merged
michael-grunder merged 1 commit intoJun 2, 2026
Merged
Conversation
redis_sock_read_bulk_reply called redis_check_eof(), which issues a php_stream_eof() probe (a recv(MSG_PEEK) syscall when the stream buffer is drained), before reading the bulk body. Every caller reaches this function only after successfully reading the bulk-length header on the same socket, which already proved the stream live, so the probe is redundant and adds a kernel round-trip to the dominant GET/HGET/MGET read path. Replace it with a cheap NULL-stream guard. A disconnect that happens mid-read is still caught by the existing php_stream_eof() check inside the read loop.
michael-grunder
approved these changes
Jun 2, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
redis_sock_read_bulk_replycalledredis_check_eof, which issues aphp_stream_eofprobe (arecv(MSG_PEEK)syscall when the stream buffer is drained), before reading the bulk body. Every caller reaches this function only after reading the bulk-length header on the same socket, which already proved the stream live, so the probe adds a redundant kernel round-trip to the dominant GET/HGET/MGET read path.Replace it with a cheap NULL-stream guard. A disconnect mid-read is still caught by the existing
php_stream_eofcheck inside the read loop.Built on PHP 8.4; smoke tests plus bulk edge cases (empty, binary with NUL/CRLF, 1MB, null to false) pass.